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

求助:DSP28335 SCI串口通讯 无法进入中断程序

入门阶段,写了一个最简单的串口通讯程序,中断方式,希望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~

赞(0)
未经允许不得转载:TI中文支持网 » 求助:DSP28335 SCI串口通讯 无法进入中断程序
分享到: 更多 (0)