sias1990 发表于 2015-1-8 23:26

关于dsp f2812 SCI fifo模式收发数据的问题。

求解答: 我用SCI的fifo模式的中断收发数据,通过串口调试的,接受中断可以进去,但是发送中断进不去。

sias1990 发表于 2015-1-8 23:30

#include "DSP28_Device.h"

char buffer;

void main(void)
{
int i = 0;
InitSysCtrl();
DINT;
IER = 0x0000;
IFR = 0x0000;

InitPieCtrl();
InitPieVectTable();
InitGpio();
InitSci();

for(i=0;i<100;i++)
{
    buffer = 0;
}
PieCtrl.PIEIER9.bit.INTx1 = 1; //ʹ��pieģ����sci�Ľ����ж�
PieCtrl.PIEIER9.bit.INTx2 = 1; //ʹ��pieģ����sci�ķ����ж�

IER |= M_INT9;
ERTM;
EINT;

for(;;)
{
    ;
}
}


*******************************************************************************************************************DefaultIsr.c********************************************

interrupt void SCIRXINTA_ISR(void)   // SCI-A�����жϺ���
{
int j;
for(j=0;j<8;j++)
{
    buffer = SciaRegs.SCIRXBUF.all;
}
if(strncmp(buffer,"hellodsp",8) == 0)
{
    SciaRegs.SCIFFTX.bit.TXINTCLR = 1;
}
SciaRegs.SCIFFRX.bit.RXFIFORESET = 0;
SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;
SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;
    PieCtrl.PIEACK.bit.ACK1 = 1;
}

interrupt void SCITXINTA_ISR(void)   // SCI-A�����жϺ���
{
int _j;
for(_j=0;_j<8;_j++)
{
    SciaRegs.SCITXBUF = buffer;
}
    PieCtrl.PIEACK.bit.ACK1 = 1;
}

sias1990 发表于 2015-1-8 23:32

请路过的大神,帮忙解答下。。。。。先先谢过了。。。程序如上

sias1990 发表于 2015-1-9 08:05

自己顶一下。没有人遇见类似问题吗

wei3890836 发表于 2015-1-9 11:33

发送中断进入的前提条件是scitxbuf中有数据进入,你把向scitubuf写入数据放在发送中断里当然进不去了,一般情况下需要预先发送数据到scitubuf,启动发送中断。
另外,我之前也遇到这种问题,现在办法是接收中断,发送轮询的方法

sias1990 发表于 2015-1-10 00:09

wei3890836 发表于 2015-1-9 11:33
发送中断进入的前提条件是scitxbuf中有数据进入,你把向scitubuf写入数据放在发送中断里当然进不去了,一般 ...

谢谢你回帖。你说的没错,不过它适用于标准模式下,在接受中断里事先发送数据到txbuff,开启动发送中断。但是在fifo模式下不用的,我设置它的中断触发级为0,就可以在一开始就产生发送中断。今天我发现了哪里出错了,原因在使用strncmp函数那点出错了,把if判断条件啥的都删了,只留里面的那个语句,就不会出错了。虽然可以正常收发了,但是,我现在还是有疑惑,我那个strncmp判断部分怎么出错了。你有什么见解吗?

杉树林罗 发表于 2015-3-2 21:50

“strncmp”,这个得添加“string.h”这个头文件吧

luospring123 发表于 2015-3-13 09:05

有例程的,可以参考那个,很不错
页: [1]
查看完整版本: 关于dsp f2812 SCI fifo模式收发数据的问题。