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

TMS320F28034 SCI FIFO发送中断

我采用接收中断服务函数使能  SciaRegs.SCIFFTX.bit.TXFFIENA = 1;  这里配置的SciaRegs.SCICTL2.bit.TXINTENA = 0;    但是我的发送中断服务函数执行了两遍,SCI配置如下:

SciaRegs.SCICTL2.bit.TXINTENA =0;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;

SciaRegs.SCIFFTX.all=0xC000; //0xC024; //FIFO最多四级缓存FIFO
SciaRegs.SCIFFRX.all=0x0021; //0x0024; receive is not considered;
SciaRegs.SCIFFCT.all=0x00; //0x0 wxm

SciaRegs.SCICTL1.all =0x0023;

SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1; //wxm the tx an rx interrupt will not ocour if no this sentence
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;

发送中断里的清除执行

SciaRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear SCI Interrupt flag
SciaRegs.SCIFFTX.bit.TXFFIENA = 0;
PieCtrlRegs.PIEACK.all|=0x100;

请问为什么中断进入两次?

这样我写发送   SciaRegs.SCITXBUF=R_buff[i]&0x00ff;  发送8位时,数据错误,只有5位;

Seven Han:您可以先测试下TI的例程:\ti\controlSUITE\device_support\f2803x\v130\DSP2803x_examples_ccsv5

我采用接收中断服务函数使能  SciaRegs.SCIFFTX.bit.TXFFIENA = 1;  这里配置的SciaRegs.SCICTL2.bit.TXINTENA = 0;    但是我的发送中断服务函数执行了两遍,SCI配置如下:

SciaRegs.SCICTL2.bit.TXINTENA =0;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;

SciaRegs.SCIFFTX.all=0xC000; //0xC024; //FIFO最多四级缓存FIFO
SciaRegs.SCIFFRX.all=0x0021; //0x0024; receive is not considered;
SciaRegs.SCIFFCT.all=0x00; //0x0 wxm

SciaRegs.SCICTL1.all =0x0023;

SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1; //wxm the tx an rx interrupt will not ocour if no this sentence
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;

发送中断里的清除执行

SciaRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear SCI Interrupt flag
SciaRegs.SCIFFTX.bit.TXFFIENA = 0;
PieCtrlRegs.PIEACK.all|=0x100;

请问为什么中断进入两次?

这样我写发送   SciaRegs.SCITXBUF=R_buff[i]&0x00ff;  发送8位时,数据错误,只有5位;

user5014940:

回复 Seven Han:

constrolSuite 的这个程序是进行自循环测试,是否有些差别呢

我采用接收中断服务函数使能  SciaRegs.SCIFFTX.bit.TXFFIENA = 1;  这里配置的SciaRegs.SCICTL2.bit.TXINTENA = 0;    但是我的发送中断服务函数执行了两遍,SCI配置如下:

SciaRegs.SCICTL2.bit.TXINTENA =0;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;

SciaRegs.SCIFFTX.all=0xC000; //0xC024; //FIFO最多四级缓存FIFO
SciaRegs.SCIFFRX.all=0x0021; //0x0024; receive is not considered;
SciaRegs.SCIFFCT.all=0x00; //0x0 wxm

SciaRegs.SCICTL1.all =0x0023;

SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1; //wxm the tx an rx interrupt will not ocour if no this sentence
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;

发送中断里的清除执行

SciaRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear SCI Interrupt flag
SciaRegs.SCIFFTX.bit.TXFFIENA = 0;
PieCtrlRegs.PIEACK.all|=0x100;

请问为什么中断进入两次?

这样我写发送   SciaRegs.SCITXBUF=R_buff[i]&0x00ff;  发送8位时,数据错误,只有5位;

user5014940:

回复 Seven Han:

你好,我查看数据手册,TXFFIL4−0 Transmit FIFO interrupt level bits. Transmit FIFO will generate interrupt when the FIFO
status bits (TXFFST4−0) and FIFO level bits (TXFFIL4−0 ) match (less than or equal to)。是否由于使能进入中断,FIFO LEVEL达到要求进入第二次中断呢,我使用历程修改也是进入两次中断,但是可以使用 SciaRegs.SCICTL1.bit.TXENA=1;进行规避,达到我自己的要求。

我采用接收中断服务函数使能  SciaRegs.SCIFFTX.bit.TXFFIENA = 1;  这里配置的SciaRegs.SCICTL2.bit.TXINTENA = 0;    但是我的发送中断服务函数执行了两遍,SCI配置如下:

SciaRegs.SCICTL2.bit.TXINTENA =0;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;

SciaRegs.SCIFFTX.all=0xC000; //0xC024; //FIFO最多四级缓存FIFO
SciaRegs.SCIFFRX.all=0x0021; //0x0024; receive is not considered;
SciaRegs.SCIFFCT.all=0x00; //0x0 wxm

SciaRegs.SCICTL1.all =0x0023;

SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1; //wxm the tx an rx interrupt will not ocour if no this sentence
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;

发送中断里的清除执行

SciaRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear SCI Interrupt flag
SciaRegs.SCIFFTX.bit.TXFFIENA = 0;
PieCtrlRegs.PIEACK.all|=0x100;

请问为什么中断进入两次?

这样我写发送   SciaRegs.SCITXBUF=R_buff[i]&0x00ff;  发送8位时,数据错误,只有5位;

user5014940:对于FIFO的发送中断,它的进入中断是发送完成以后和使能了FIFO发送中断进入中断 ,即只要使能了FIFO发送中断,就会不停的进入中断。这里和之前的中断不一样,采用发送中断进行发送数据时可以采用,查询法,或者中断法进行发送。中断法主要是是利用FIFO为空后继续进入中断,每次只能传输四个字节,比查询法快。叙述的不太清楚,也是刚开始学习,懵懵的。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28034 SCI FIFO发送中断
分享到: 更多 (0)