入门阶段,写了一个最简单的串口通讯程序,中断方式,希望dsp向上位机发送一串数据。
但是一直进入不了中断,不知道什么原因。使用的是SCIC,GPIO已经配置好了。
把程序贴在下面,希望得到高手解答。
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#define SCIC 1
interrupt void scicTxFifoIsr(void);
void Scic_init(void);//SCI串口初始化程序
void Scic_fifo_init(void);//SCI_FIFO初始化程序
void main(void)
{
InitSysCtrl();
InitSciGpio();
DINT;
InitPieCtrl(); I
ER=0x0000;
IFR=0x0000;
InitPieVectTable();//使能PIE模块 EALLOW;
PieVectTable.SCITXINTC=&scicTxFifoIsr;
EDIS; Scic_init();
Scic_fifo_init();
//使能所需中断
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
PieCtrlRegs.PIEIER8.bit.INTx5=1;
PieCtrlRegs.PIEIER8.bit.INTx6=1;
IER=0x080;//开第八组中断
EINT;
for(;;); //空循环等待中断 }
void Scic_init()
{ ScicRegs.SCICCR.all=0x0007; //1位停止位,No loopback //无奇偶校验,8位数据长度 //同步模式,空闲线模式
ScicRegs.SCICTL1.all=0x0003; //使能TX,RX,内部,SCICLK //禁用RX ERR,SLEEP.TXWAKE
ScicRegs.SCICTL2.bit.TXINTENA=1; //发送中断使能
ScicRegs.SCICTL2.bit.RXBKINTENA=1;//接受中断使能
#if (CPU_FRQ_150MHZ)
ScicRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 37.5MHz.
ScicRegs.SCILBAUD =0x00E7;
#endif
#if (CPU_FRQ_100MHZ)
ScicRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 20MHz.
ScicRegs.SCILBAUD =0x0044;
#endif
ScicRegs.SCICTL1.all=0x0023;//Relinquish SCI from Reset
}
void Scic_fifo_init()//FIFO初始化
{
ScicRegs.SCIFFTX.all=0xC028;
ScicRegs.SCIFFRX.all=0x0028;
ScicRegs.SCIFFCT.all=0x00;
ScicRegs.SCIFFTX.bit.TXFIFOXRESET=1;
ScicRegs.SCIFFRX.bit.RXFIFORESET=1;
}
interrupt void scicTxFifoIsr(void)
{
Uint16 i=1; ScicRegs.SCITXBUF=i;
ScicRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear SCI Interrupt flag
PieCtrlRegs.PIEACK.all|=0x080; // Issue PIE ACK
}
另外:如果我不写
PieVectTable.SCITXINTC=&scicTxFifoIsr;
这句,程序会自动跳入DefaultIsr.c函数里的
interrupt void SCITXINTC_ISR(void)
所以我认为是中断向量没有指向scicTxFifoIsr函数,但又不知道哪里出问题
Chen Jones:
建议楼主还是先参考TI F28335的官方历程吧
具体路径:
C:\ti\controlSUITE\device_support\f2833x\v133\DSP2833x_examples_ccsv4\scia_loopback_interrupts
入门阶段,写了一个最简单的串口通讯程序,中断方式,希望dsp向上位机发送一串数据。
但是一直进入不了中断,不知道什么原因。使用的是SCIC,GPIO已经配置好了。
把程序贴在下面,希望得到高手解答。
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#define SCIC 1
interrupt void scicTxFifoIsr(void);
void Scic_init(void);//SCI串口初始化程序
void Scic_fifo_init(void);//SCI_FIFO初始化程序
void main(void)
{
InitSysCtrl();
InitSciGpio();
DINT;
InitPieCtrl(); I
ER=0x0000;
IFR=0x0000;
InitPieVectTable();//使能PIE模块 EALLOW;
PieVectTable.SCITXINTC=&scicTxFifoIsr;
EDIS; Scic_init();
Scic_fifo_init();
//使能所需中断
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
PieCtrlRegs.PIEIER8.bit.INTx5=1;
PieCtrlRegs.PIEIER8.bit.INTx6=1;
IER=0x080;//开第八组中断
EINT;
for(;;); //空循环等待中断 }
void Scic_init()
{ ScicRegs.SCICCR.all=0x0007; //1位停止位,No loopback //无奇偶校验,8位数据长度 //同步模式,空闲线模式
ScicRegs.SCICTL1.all=0x0003; //使能TX,RX,内部,SCICLK //禁用RX ERR,SLEEP.TXWAKE
ScicRegs.SCICTL2.bit.TXINTENA=1; //发送中断使能
ScicRegs.SCICTL2.bit.RXBKINTENA=1;//接受中断使能
#if (CPU_FRQ_150MHZ)
ScicRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 37.5MHz.
ScicRegs.SCILBAUD =0x00E7;
#endif
#if (CPU_FRQ_100MHZ)
ScicRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 20MHz.
ScicRegs.SCILBAUD =0x0044;
#endif
ScicRegs.SCICTL1.all=0x0023;//Relinquish SCI from Reset
}
void Scic_fifo_init()//FIFO初始化
{
ScicRegs.SCIFFTX.all=0xC028;
ScicRegs.SCIFFRX.all=0x0028;
ScicRegs.SCIFFCT.all=0x00;
ScicRegs.SCIFFTX.bit.TXFIFOXRESET=1;
ScicRegs.SCIFFRX.bit.RXFIFORESET=1;
}
interrupt void scicTxFifoIsr(void)
{
Uint16 i=1; ScicRegs.SCITXBUF=i;
ScicRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear SCI Interrupt flag
PieCtrlRegs.PIEACK.all|=0x080; // Issue PIE ACK
}
另外:如果我不写
PieVectTable.SCITXINTC=&scicTxFifoIsr;
这句,程序会自动跳入DefaultIsr.c函数里的
interrupt void SCITXINTC_ISR(void)
所以我认为是中断向量没有指向scicTxFifoIsr函数,但又不知道哪里出问题
xiaoping wang:
PieVectTable.SCITXINTC=&scicTxFifoIsr;
这句就是进中断程序用的额
在中断程序中完成功能
入门阶段,写了一个最简单的串口通讯程序,中断方式,希望dsp向上位机发送一串数据。
但是一直进入不了中断,不知道什么原因。使用的是SCIC,GPIO已经配置好了。
把程序贴在下面,希望得到高手解答。
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#define SCIC 1
interrupt void scicTxFifoIsr(void);
void Scic_init(void);//SCI串口初始化程序
void Scic_fifo_init(void);//SCI_FIFO初始化程序
void main(void)
{
InitSysCtrl();
InitSciGpio();
DINT;
InitPieCtrl(); I
ER=0x0000;
IFR=0x0000;
InitPieVectTable();//使能PIE模块 EALLOW;
PieVectTable.SCITXINTC=&scicTxFifoIsr;
EDIS; Scic_init();
Scic_fifo_init();
//使能所需中断
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
PieCtrlRegs.PIEIER8.bit.INTx5=1;
PieCtrlRegs.PIEIER8.bit.INTx6=1;
IER=0x080;//开第八组中断
EINT;
for(;;); //空循环等待中断 }
void Scic_init()
{ ScicRegs.SCICCR.all=0x0007; //1位停止位,No loopback //无奇偶校验,8位数据长度 //同步模式,空闲线模式
ScicRegs.SCICTL1.all=0x0003; //使能TX,RX,内部,SCICLK //禁用RX ERR,SLEEP.TXWAKE
ScicRegs.SCICTL2.bit.TXINTENA=1; //发送中断使能
ScicRegs.SCICTL2.bit.RXBKINTENA=1;//接受中断使能
#if (CPU_FRQ_150MHZ)
ScicRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 37.5MHz.
ScicRegs.SCILBAUD =0x00E7;
#endif
#if (CPU_FRQ_100MHZ)
ScicRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 20MHz.
ScicRegs.SCILBAUD =0x0044;
#endif
ScicRegs.SCICTL1.all=0x0023;//Relinquish SCI from Reset
}
void Scic_fifo_init()//FIFO初始化
{
ScicRegs.SCIFFTX.all=0xC028;
ScicRegs.SCIFFRX.all=0x0028;
ScicRegs.SCIFFCT.all=0x00;
ScicRegs.SCIFFTX.bit.TXFIFOXRESET=1;
ScicRegs.SCIFFRX.bit.RXFIFORESET=1;
}
interrupt void scicTxFifoIsr(void)
{
Uint16 i=1; ScicRegs.SCITXBUF=i;
ScicRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear SCI Interrupt flag
PieCtrlRegs.PIEACK.all|=0x080; // Issue PIE ACK
}
另外:如果我不写
PieVectTable.SCITXINTC=&scicTxFifoIsr;
这句,程序会自动跳入DefaultIsr.c函数里的
interrupt void SCITXINTC_ISR(void)
所以我认为是中断向量没有指向scicTxFifoIsr函数,但又不知道哪里出问题
binchao ru:
你的SCI FIFO 没有RESET呀~ 应该是ScicRegs.SCIFFTX.all=0xE028~