您好!
我根据 SCI-A 导入 UART 中断回送示例。 它工作正常。 我将转换为 SCI-C。当接收到数据时、不会在中断 矢量处到达数据。
I 为 SCI-C 设置中断组:
PieCtrlRegs.PIEIER8.bit.INTx5=1;
PieCtrlRegs.PIEIER8.bit.INTx6= 1;
我的代码如下所示。请帮我。
此致-
Sudip
#include "DSP28x_Project.h"//器件头文件和示例 include 文件
#define CPU_FREQ 60E6
#define LSPCLK_FREQ (CPU_FREQ/4)
#define SCI_FREQ 100E3
#define SCI_PRD ((LSPCLK_FREQ/(SCI_FREQ*8))-1)
//此文件中找到的函数的原型语句。
中断 void scicTxFifoIsr (void);
中断 void scicRxFifoIsr (void);
//全局变量
uint16 sdataA[2];//为 SCI-A 发送数据
uint16 rdataA[2];//针对 SCI-A 接收到的数据
uint16 RDATA_pointA;//用于检查接收到的数据
void main (void)
{
uint16 i;
InitSysCtrl();
EALLOW;
GpioCtrlRegs.GPBPUD.bit.GPIO39 = 0;//启用 GPIO39的上拉电阻器(SCIRXDC)
GpioCtrlRegs.GPBPUD.bit.GPIO42 = 0;//启用 GPIO42的上拉(SCITXDC)
GpioCtrlRegs.GPBQSEL1.bit.GPIO39 = 3;//异步输入 GPIO39 (SCIRXDC)
GpioCtrlRegs.GPBMUX1.bit.GPIO39 = 2;//为 SCIRXDC 配置 GPIO39
GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 2;//为 SCITXDC 配置 GPIO42
EDIS;
Dint;
InitPieCtrl();
InitPieVectTable();
IER = 0x0000;
IFR = 0x0000;
EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.SCIRXINTC =&scicRxFifoIsr;
PieVectTable.SCITXINTC =&scicTxFifoIsr;
EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的
ScicRegs.SCICTL1.ALL = 0x0023;//从复位中撤回 SCI
ScicRegs.SCICTL2.bit.TXINTENA=1;
ScicRegs.SCICTL2.bit.RXBKINTENA=1;
ScicRegs.SCICCR.ALL = 0x0007;
ScicRegs.SCICCR.bit.LOOPBKENA =0;// 1;//启用回路
ScicRegs.SCILBAUD=0x00C2;
ScicRegs.SCIFFRX.ALL = 0x0022;
ScicRegs.SCIFFRX.bit.RXFIFORESET = 1;
ScicRegs.SCIFFRX.bit.RXFFIENA=1;
ScicRegs.SCIFFCT.ALL = 0x00;
ScicRegs.SCIFFTX.ALL = 0xC022;
ScicRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
//////////////////////////////////////////////////////////////////////////////////////////////
对于(i = 0;i<2;i++)
{
sdataA[i]= i;
}
RDATA_pointA = sdataA[0];
//
//启用此示例所需的中断
//
PieCtrlRegs.PIECTRL.bit.ENPIE= 1;//启用 PIE 块
// PieCtrlRegs.PIEIER9.bit.INTx1= 1;// PIE 组9,INT1
// PieCtrlRegs.PIEIER9.bit.INTx2= 1;// PIE 组9,int2
PieCtrlRegs.PIEIER8.bit.INTx5=1;
PieCtrlRegs.PIEIER8.bit.INTx6= 1;
IER = 0x100;//启用 CPU INT
EINT;
//
//步骤6. 空闲循环。 只需坐下来循环(可选):
//
for (;;)
{
}
}
空错误(空)
{
asm (" ESTOP0");//测试失败!! 停下来!
适用于(;);
}
中断空 scicTxFifoIsr (空)
{
uint16 i;
for (i=0;i < 2;i++)
{
ScicRegs.SCITXBUF = sdataA[i];//发送数据
}
for (i= 0;i < 2;i++)//递增发送下一个周期的数据
{
sdataA[i]=(sdataA[i]+1)和0x00FF;
}
ScicRegs.SCIFFTX.bit.TXFFINTCLR = 1;//清除 SCI 中断标志
PieCtrlRegs.PIEACK.ALL |= 0x100;//发出 PIE ACK
}
中断空 scicRxFifoIsr (空)
{
uint16 i;
对于(I = 0;I < 2;I++)
{
rdataA[i]= ScicRegs.SCIRXBUF.all;//读取数据
}
for (i = 0;i < 2;i++)//检查接收到的数据
{
if (rdataA[i]!=((RDATA_pointA+I)& 0x00FF) error ();
}
RDATA_pointA =(RDATA_pointA+1)和0x00FF;
ScicRegs.SCIFFRX.bit.RXFFOVRCLR = 1;//清除溢出标志
ScicRegs.SCIFFRX.bit.RXFFINTCLR = 1;//清除中断标志
PieCtrlRegs.PIEACK.ALL |= 0x100;//发出 PIE ACK
}