我采用接收中断服务函数使能 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为空后继续进入中断,每次只能传输四个字节,比查询法快。叙述的不太清楚,也是刚开始学习,懵懵的。