TI中文支持网
TI专业的中文技术问题搜集分享网站

28335 打算使用sys/bios SCIfifo中断接收数据,但一直没有办法进入中断服务函数,程序很简单,可能是哪里没有注意到,调试很久了没有结果,求帮忙解答

       正常的任务能运行,但是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:

你好,问题解决了么。可否分享一下解决方案。

赞(0)
未经允许不得转载:TI中文支持网 » 28335 打算使用sys/bios SCIfifo中断接收数据,但一直没有办法进入中断服务函数,程序很简单,可能是哪里没有注意到,调试很久了没有结果,求帮忙解答
分享到: 更多 (0)