正常的任务能运行,但是fifo中断函数没办法执行,配置情况下
#include <xdc/std.h> #include <xdc/runtime/Error.h> #include <xdc/runtime/System.h> #include <ti/sysbios/BIOS.h> #include <ti/sysbios/knl/Task.h> #include <xdc/runtime/log.h> #include "DSP28x_Project.h"// Device Headerfile and Examples Include File #include <xdc/cfg/global.h> void func_tsk0(void); void func_tsk1(void); void sciaRxFifoIsr(void);
/*
* ======== main ========
*/
Int main()
{InitSysCtrl();DisableDog();InitSci();Task_Handle task;Error_Block eb;System_printf("enter main()\n");Error_init(&eb);task = Task_create(taskFxn, NULL, &eb);if (task == NULL) {System_printf("Task_create() failed!\n");BIOS_exit(0);}BIOS_start();/* does not return */return(0);
}
void sciaRxFifoIsr(void)
{System_printf("enter_isr\n");while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}SciaRegs.SCITXBUF=0xff;// Send dataScicRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flagScicRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
}
void scia_fifo_init(void)
{SciaRegs.SCICCR.all =0x0007;// 1 stop bit, No loopback// No parity,8 char bits,// async mode, idle-line protocolSciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,// Disable RX ERR, SLEEP, TXWAKESciaRegs.SCICTL2.bit.TXINTENA =1;SciaRegs.SCICTL2.bit.RXBKINTENA =1;SciaRegs.SCIHBAUD=0x0001; // 9600 baud @LSPCLK = 37.5MHz.SciaRegs.SCILBAUD=0x00E7;// SciaRegs.SCIHBAUD=0x0001; // 9600 baud @LSPCLK = 25MHz.// SciaRegs.SCILBAUD=0x0044;
//SciaRegs.SCIHBAUD = 0x0000;
//SciaRegs.SCILBAUD = SCI_PRD;SciaRegs.SCIFFTX.all=0xC028;SciaRegs.SCIFFRX.all=0x2070;SciaRegs.SCIFFCT.all=0x00;SciaRegs.SCICTL1.all =0x0023;// Relinquish SCI from ResetSciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
}

程序运行情况如下

jinkui wang:
回复 Johnson Chen1:
感谢回复,我用的SCI-A,图里应该是说明触发中断了吧,flag是进入中断服务函数后置1的标志量,一直是0,换裸机跑就没有问题,还是不知道原因出在哪

正常的任务能运行,但是fifo中断函数没办法执行,配置情况下
#include <xdc/std.h> #include <xdc/runtime/Error.h> #include <xdc/runtime/System.h> #include <ti/sysbios/BIOS.h> #include <ti/sysbios/knl/Task.h> #include <xdc/runtime/log.h> #include "DSP28x_Project.h"// Device Headerfile and Examples Include File #include <xdc/cfg/global.h> void func_tsk0(void); void func_tsk1(void); void sciaRxFifoIsr(void);
/*
* ======== main ========
*/
Int main()
{InitSysCtrl();DisableDog();InitSci();Task_Handle task;Error_Block eb;System_printf("enter main()\n");Error_init(&eb);task = Task_create(taskFxn, NULL, &eb);if (task == NULL) {System_printf("Task_create() failed!\n");BIOS_exit(0);}BIOS_start();/* does not return */return(0);
}
void sciaRxFifoIsr(void)
{System_printf("enter_isr\n");while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}SciaRegs.SCITXBUF=0xff;// Send dataScicRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flagScicRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
}
void scia_fifo_init(void)
{SciaRegs.SCICCR.all =0x0007;// 1 stop bit, No loopback// No parity,8 char bits,// async mode, idle-line protocolSciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,// Disable RX ERR, SLEEP, TXWAKESciaRegs.SCICTL2.bit.TXINTENA =1;SciaRegs.SCICTL2.bit.RXBKINTENA =1;SciaRegs.SCIHBAUD=0x0001; // 9600 baud @LSPCLK = 37.5MHz.SciaRegs.SCILBAUD=0x00E7;// SciaRegs.SCIHBAUD=0x0001; // 9600 baud @LSPCLK = 25MHz.// SciaRegs.SCILBAUD=0x0044;
//SciaRegs.SCIHBAUD = 0x0000;
//SciaRegs.SCILBAUD = SCI_PRD;SciaRegs.SCIFFTX.all=0xC028;SciaRegs.SCIFFRX.all=0x2070;SciaRegs.SCIFFCT.all=0x00;SciaRegs.SCICTL1.all =0x0023;// Relinquish SCI from ResetSciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
}

程序运行情况如下

Johnson Chen1:
回复 jinkui wang:
从寄存器看应该是,中断应该是使能了,也产生了中断请求,只是如法跳转到中断服务函数入口,应该还是sys/bios配置的问题。
正常的任务能运行,但是fifo中断函数没办法执行,配置情况下
#include <xdc/std.h> #include <xdc/runtime/Error.h> #include <xdc/runtime/System.h> #include <ti/sysbios/BIOS.h> #include <ti/sysbios/knl/Task.h> #include <xdc/runtime/log.h> #include "DSP28x_Project.h"// Device Headerfile and Examples Include File #include <xdc/cfg/global.h> void func_tsk0(void); void func_tsk1(void); void sciaRxFifoIsr(void);
/*
* ======== main ========
*/
Int main()
{InitSysCtrl();DisableDog();InitSci();Task_Handle task;Error_Block eb;System_printf("enter main()\n");Error_init(&eb);task = Task_create(taskFxn, NULL, &eb);if (task == NULL) {System_printf("Task_create() failed!\n");BIOS_exit(0);}BIOS_start();/* does not return */return(0);
}
void sciaRxFifoIsr(void)
{System_printf("enter_isr\n");while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}SciaRegs.SCITXBUF=0xff;// Send dataScicRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flagScicRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
}
void scia_fifo_init(void)
{SciaRegs.SCICCR.all =0x0007;// 1 stop bit, No loopback// No parity,8 char bits,// async mode, idle-line protocolSciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,// Disable RX ERR, SLEEP, TXWAKESciaRegs.SCICTL2.bit.TXINTENA =1;SciaRegs.SCICTL2.bit.RXBKINTENA =1;SciaRegs.SCIHBAUD=0x0001; // 9600 baud @LSPCLK = 37.5MHz.SciaRegs.SCILBAUD=0x00E7;// SciaRegs.SCIHBAUD=0x0001; // 9600 baud @LSPCLK = 25MHz.// SciaRegs.SCILBAUD=0x0044;
//SciaRegs.SCIHBAUD = 0x0000;
//SciaRegs.SCILBAUD = SCI_PRD;SciaRegs.SCIFFTX.all=0xC028;SciaRegs.SCIFFRX.all=0x2070;SciaRegs.SCIFFCT.all=0x00;SciaRegs.SCICTL1.all =0x0023;// Relinquish SCI from ResetSciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
}

程序运行情况如下

user5029276:
回复 jinkui wang:
你好,问题解决了么。可否分享一下解决方案。
TI中文支持网
