{
SciaRegs.SCICCR.bit.STOPBITS = 0; //设置为1个停止位
SciaRegs.SCICCR.bit.PARITYENA = 0; //禁止奇偶校验
SciaRegs.SCICCR.bit.LOOPBKENA = 0; //禁止回送测试模式功能
SciaRegs.SCICCR.bit.ADDRIDLE_MODE = 0; //只与PC上位机进行通信,因此选择空闲线模式协议
SciaRegs.SCICCR.bit.SCICHAR = 7; //选择数据的长度为8位
SciaRegs.SCICTL1.bit.TXENA = 1; //启动发送器工作
SciaRegs.SCICTL1.bit.RXENA = 1; //使能接收位
SciaRegs.SCIHBAUD = 0;
SciaRegs.SCILBAUD = 0xF3;//设置波特率为19200
SciaRegs.SCICTL1.bit.SWRESET = 1; //复位SCI模块
}
****************************************************************************/
#include "DSP28_Device.h"
unsigned int Sci_Result;//用于存放接收到的数据
unsigned int i;
unsigned int Send_Flag; //发送标志位。1:有数据需要发送 0:无数据需要发送
/****************************************************************************
*
*名 称:SciaTx_Ready()
*
*功 能:查询SCICTL2寄存器的TXRDY标志位,来确认发送准备是否就绪
*
*入口参数:无
*
*出口参数:i,即TXRDY的状态
* 1:发送准备已经就绪
* 0:发送准备尚未就绪
*
****************************************************************************/
int SciaTx_Ready()
{
unsigned int ans;
if(SciaRegs.SCICTL2.bit.TXRDY == 1)
{
ans = 1;
}
else
{
ans= 0;
}
return ans;
}
/****************************************************************************
*
*名 称:SciaRx_Ready()
*
*功 能:查询SCIRXST寄存器的RXRDY标志位,来确认接收准备是否就绪
*
*入口参数:无
*
*出口参数:i,即RXRDY的状态
* 1:接收准备已经就绪
* 0:接收准备尚未就绪
*
****************************************************************************/
int SciaRx_Ready()
{
unsigned int ans;
if(SciaRegs.SCIRXST.bit.RXRDY == 1)
{
ans = 1;
}
else
{
ans = 0;
}
return ans;
}
void main()
{
DINT;
IER = 0x0000;
IFR = 0x0000;
InitSysCtrl();
InitPieCtrl();
InitPieVectTable();
InitGpio();
InitPeripherals();
for(i=0;i<100;i++)
{
Sci_Result = 0;
}
Send_Flag = 0;
i=0;
PieCtrl.PIEIER9.bit.INTx1 = 1; //使能PIE中断的接收中断
PieCtrl.PIEIER9.bit.INTx2 = 1; //使能PIE中断的发送中断
IER|=M_INT9;
EINT;
DRTM;
while(1);
}
interrupt void SCIRXINTA_ISR() // SCI-A接收中断函数
{
Sci_Result = SciaRegs.SCIRXBUF.all;
Send_Flag = 1;
if(SciaTx_Ready() == 1)
{
SciaRegs.SCITXBUF =Sci_Result;
}
PieCtrl.PIEACK.all = PIEACK_GROUP9;
//EINT;
}
interrupt void SCITXINTA_ISR() // SCI-A发送中断函数
{
if(Send_Flag == 1)
{
Send_Flag = 0;
i++;
if(i==100)
{
i=0;
}
}
PieCtrl.PIEACK.all = PIEACK_GROUP9;
//EINT;
} 这个可以进去,在板子上测试过了。。。。。 asas1235813 发表于 2013-8-30 23:07 static/image/common/back.gif
这个可以进去,在板子上测试过了。。。。。
:)非常感谢!!!我试试,如有问题,望能再请教!!!!:handshake tianwen_4524 发表于 2013-8-31 09:16 static/image/common/back.gif
非常感谢!!!我试试,如有问题,望能再请教!!!!
也是菜鸟,一起讨论:lol asas1235813 发表于 2013-8-31 09:34 static/image/common/back.gif
也是菜鸟,一起讨论
兄弟,真谦虚!
我看了你的程序,觉得有点奇怪,怎么在接收中断里发送数据,难道在发送中断里发送数据不行吗???
asas1235813 发表于 2013-8-31 09:34 static/image/common/back.gif
也是菜鸟,一起讨论
不过我先回去上机试试再说吧!!!!!!!非常感谢了!! tianwen_4524 发表于 2013-8-31 09:40 static/image/common/back.gif
不过我先回去上机试试再说吧!!!!!!!非常感谢了!!
才上手一个月,确实是菜鸟:lol 所谓的发送中断的含义并不是在中断里面进行发送数据, 发送中断进入的条件是TXRDY被置位以后才能进入发送中断。而SCITXBYF的数据发送完成以后TXRDY才会被置位,也就是说在发送数据完成之后才进入发送中断,换句话来说,并不是通过中断来发送数据,而是发送数据完成以后才进入中断。同样接收中断也是接收完数据后才进入接收中断。所以使用不需要一定在发送中断里发送数据,而可以再任何一个中断里都可以发送数据,比如说定时中断,周期中断也可以发送,也可以,不知道懂了没。。。。。 asas1235813 发表于 2013-8-31 09:53 static/image/common/back.gif
才上手一个月,确实是菜鸟 所谓的发送中断的含义并不是在中断里面进行发送数据, 发送中断进入的 ...
明白!谢谢!!! tianwen_4524 发表于 2013-8-31 10:27 static/image/common/back.gif
明白!谢谢!!!
相互交流 :lol asas1235813 发表于 2013-8-31 10:29 static/image/common/back.gif
相互交流
非常感谢各位,问题搞定了!
我试了之前上楼的方法,再接收中断中发送数据,能正常进入发送中断!
后,我又试了再发送中断中发送数据,也能正常进入发送中断!
我的方法,与大家共享一下,与有什么不对请指教!
void main()
{ SysCtrl_init();
DINT;
IER=0;
IFR=0;
PieCtrl_init();
PieVectTable_init();
Sci_init();
EALLOW;
PieVectTable.Txint=&SCITXINTA_ISR;
PieVectTable.Rxint=&SCIRXINTA_ISR;
EDIS;
PieCtrl.PIEIER9.bit.INTX1=1;
PieCtrl.PIEER9.bit.INTX2=1;
IER=IER|0X0100;
EINT;
if(SciaRegs.SCICTL2.bit.TXRDY==1)
SciaRegs.SCITXBUF=TXDATA;
while(SciaRegs.SCICTL2.bit.TXEMPTY==1)
SciaRegs.SCITXBUF=TXDATA;
while(1)
{
while(SciaRegs.SCICTL2.bit.TXEMPTY==1)
SciaRegs.SCITXBUF=TXDATA;
}
}
void SCIRXINTA_ISR()
{
RXDATA=SciaRegs.SCIRXBUF.all&0xFF;
PieCtrl.PIEACK.bit.ACK9=1;
}
void SCIRXINTA_ISR()
{
SciaRegs.SCITXBUF=TXDATA;
TXDATA++;
if(TXDATA>=256)
TXDATA=0;
PieCtrl.PIEACK.bit.ACK9=1;
}
HD21425 发表于 2013-8-30 22:07 static/image/common/back.gif
上面的“发送一个数据来启动发送中断”意思是:你先要给SCITXBUF赋一个值,这样SCITXBUF会发送给TXSHF,然 ...
向SCITXBUF赋一个值,那我接收到这个无用的值怎么处理? tianwen_4524 发表于 2013-9-4 10:44 static/image/common/back.gif
非常感谢各位,问题搞定了!
我试了之前上楼的方法,再接收中断中发送数据,能正常进入发送中断!
你在发送中断中发送数据也能进入中断是因为你在主函数中预先向SciaRegs.SCITXBUF=TXDATA写入数据,这才触发发送中断的
页:
1
[2]