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

关于28034SCI问题的请教

问题描述;1、我的SCI为奇校验,使能FIFO,采用查询的方式工作,下附初始化代码。

                2、总线上的数据有奇校验也有偶校验,每组数据(包括查询及回复数据)的间隔都在100ms以上。

                3、对于总线数据错误,我的应用层有两种处理方式:

                        (1)若查询到有接受错误,那么立刻重新初始化SCI,同时复位FIFO指针到0;

                        (2)先不对SCIRXST寄存器中的错误状态进行判断,总线上的数据全部接收,

                                 待接受完数据后(判断总线空闲10ms),判断SCIRXST是否存在错误,

                                 如果存在错误,那么重新初始化SCI,同时复位FIFO指针到0。

                4、对于3中描述的两种处理方式,若采用第一种方式,对于总线上正常(奇校验)查询我SCI的数据,我们这边都能正常回复,

                      而若采用第二种处理方式,  总线上正常(奇校验)查询我SCI的数据,我们这边就有不能回复(不是每次都不回复,偶尔出现)的时候,故我的问题是,对于

                      我们的SCI模块接受错误后立即处理和等待一段时间后再处理,会不会有什么不同,而导致正常的数据也不能正确接受或者回复?或者根据以上描述还有什么其他可能的原因导致SCI不回复?

 

感谢。

SCI初始化代码

void InitSci(void)

{

            // Initialize SCI-A:

 

            InitSciaGpio();

           

            SciaRegs.SCICCR.all = 0x0027;   // 1 stop, odd parity,8 char, async mode, idle-line

            SciaRegs.SCICTL1.all = 0x0003;  // bit0,enable RX, bit5,reset SCI, bit1,enable TX

            SciaRegs.SCICTL2.all = 0x0000;  // bit0:TX INT  bit1:RX/BK INT all disable

           

            //LSPCLK=60/4=15M

            //SciaRegs.SCIHBAUD = 0x0001;        // 9600 baud @LSPCLK = 25MHz. 

            //SciaRegs.SCILBAUD = 0x0044;        //LSPCLK/(BRR+1)/8=9600,==>BRR=324

            SciaRegs.SCIHBAUD = 0x0000;          // 9600 baud @LSPCLK = 15MHz. 

            SciaRegs.SCILBAUD = 0x00C2;                      //LSPCLK/(BRR+1)/8=9600,==>BRR=194

           

            SciaRegs.SCIRXST.all = 0x00;            //Read access only

            SciaRegs.SCIRXEMU = 0x00;             //Read access only

            SciaRegs.SCIRXBUF.all= 0x00;

            //rsvd1;   

            SciaRegs.SCITXBUF = 0x00;

 

            SciaRegs.SCIPRI.all =0x10;  // 1 0 Complete current receive/transmit sequence before stopping 

 

            SciaRegs.SCICTL1.all = 0x0023;  // Relinquish SCI from Reset 

 

            SciaRegs.SCIFFTX.all = 0xE040; //1110 0000 0100 0000B

            SciaRegs.SCIFFRX.all = 0x204f; //0110 0000 0100 1111B

            SciaRegs.SCIFFCT.all = 0x0;    //

            SciaRegs.SCICTL1.bit.SWRESET = 1;  // Relinquish SCI from Reset

 

}          

 

clark FU:

有没有人来回答啊, 顶一下~

问题描述;1、我的SCI为奇校验,使能FIFO,采用查询的方式工作,下附初始化代码。

                2、总线上的数据有奇校验也有偶校验,每组数据(包括查询及回复数据)的间隔都在100ms以上。

                3、对于总线数据错误,我的应用层有两种处理方式:

                        (1)若查询到有接受错误,那么立刻重新初始化SCI,同时复位FIFO指针到0;

                        (2)先不对SCIRXST寄存器中的错误状态进行判断,总线上的数据全部接收,

                                 待接受完数据后(判断总线空闲10ms),判断SCIRXST是否存在错误,

                                 如果存在错误,那么重新初始化SCI,同时复位FIFO指针到0。

                4、对于3中描述的两种处理方式,若采用第一种方式,对于总线上正常(奇校验)查询我SCI的数据,我们这边都能正常回复,

                      而若采用第二种处理方式,  总线上正常(奇校验)查询我SCI的数据,我们这边就有不能回复(不是每次都不回复,偶尔出现)的时候,故我的问题是,对于

                      我们的SCI模块接受错误后立即处理和等待一段时间后再处理,会不会有什么不同,而导致正常的数据也不能正确接受或者回复?或者根据以上描述还有什么其他可能的原因导致SCI不回复?

 

感谢。

SCI初始化代码

void InitSci(void)

{

            // Initialize SCI-A:

 

            InitSciaGpio();

           

            SciaRegs.SCICCR.all = 0x0027;   // 1 stop, odd parity,8 char, async mode, idle-line

            SciaRegs.SCICTL1.all = 0x0003;  // bit0,enable RX, bit5,reset SCI, bit1,enable TX

            SciaRegs.SCICTL2.all = 0x0000;  // bit0:TX INT  bit1:RX/BK INT all disable

           

            //LSPCLK=60/4=15M

            //SciaRegs.SCIHBAUD = 0x0001;        // 9600 baud @LSPCLK = 25MHz. 

            //SciaRegs.SCILBAUD = 0x0044;        //LSPCLK/(BRR+1)/8=9600,==>BRR=324

            SciaRegs.SCIHBAUD = 0x0000;          // 9600 baud @LSPCLK = 15MHz. 

            SciaRegs.SCILBAUD = 0x00C2;                      //LSPCLK/(BRR+1)/8=9600,==>BRR=194

           

            SciaRegs.SCIRXST.all = 0x00;            //Read access only

            SciaRegs.SCIRXEMU = 0x00;             //Read access only

            SciaRegs.SCIRXBUF.all= 0x00;

            //rsvd1;   

            SciaRegs.SCITXBUF = 0x00;

 

            SciaRegs.SCIPRI.all =0x10;  // 1 0 Complete current receive/transmit sequence before stopping 

 

            SciaRegs.SCICTL1.all = 0x0023;  // Relinquish SCI from Reset 

 

            SciaRegs.SCIFFTX.all = 0xE040; //1110 0000 0100 0000B

            SciaRegs.SCIFFRX.all = 0x204f; //0110 0000 0100 1111B

            SciaRegs.SCIFFCT.all = 0x0;    //

            SciaRegs.SCICTL1.bit.SWRESET = 1;  // Relinquish SCI from Reset

 

}          

 

rookiecalf:

回复 clark FU:

查询方式后面会跟其他模块的占用时间片相关,建议改为中断模式,中断中负责收发,主循环中做非实时性的数据处理

问题描述;1、我的SCI为奇校验,使能FIFO,采用查询的方式工作,下附初始化代码。

                2、总线上的数据有奇校验也有偶校验,每组数据(包括查询及回复数据)的间隔都在100ms以上。

                3、对于总线数据错误,我的应用层有两种处理方式:

                        (1)若查询到有接受错误,那么立刻重新初始化SCI,同时复位FIFO指针到0;

                        (2)先不对SCIRXST寄存器中的错误状态进行判断,总线上的数据全部接收,

                                 待接受完数据后(判断总线空闲10ms),判断SCIRXST是否存在错误,

                                 如果存在错误,那么重新初始化SCI,同时复位FIFO指针到0。

                4、对于3中描述的两种处理方式,若采用第一种方式,对于总线上正常(奇校验)查询我SCI的数据,我们这边都能正常回复,

                      而若采用第二种处理方式,  总线上正常(奇校验)查询我SCI的数据,我们这边就有不能回复(不是每次都不回复,偶尔出现)的时候,故我的问题是,对于

                      我们的SCI模块接受错误后立即处理和等待一段时间后再处理,会不会有什么不同,而导致正常的数据也不能正确接受或者回复?或者根据以上描述还有什么其他可能的原因导致SCI不回复?

 

感谢。

SCI初始化代码

void InitSci(void)

{

            // Initialize SCI-A:

 

            InitSciaGpio();

           

            SciaRegs.SCICCR.all = 0x0027;   // 1 stop, odd parity,8 char, async mode, idle-line

            SciaRegs.SCICTL1.all = 0x0003;  // bit0,enable RX, bit5,reset SCI, bit1,enable TX

            SciaRegs.SCICTL2.all = 0x0000;  // bit0:TX INT  bit1:RX/BK INT all disable

           

            //LSPCLK=60/4=15M

            //SciaRegs.SCIHBAUD = 0x0001;        // 9600 baud @LSPCLK = 25MHz. 

            //SciaRegs.SCILBAUD = 0x0044;        //LSPCLK/(BRR+1)/8=9600,==>BRR=324

            SciaRegs.SCIHBAUD = 0x0000;          // 9600 baud @LSPCLK = 15MHz. 

            SciaRegs.SCILBAUD = 0x00C2;                      //LSPCLK/(BRR+1)/8=9600,==>BRR=194

           

            SciaRegs.SCIRXST.all = 0x00;            //Read access only

            SciaRegs.SCIRXEMU = 0x00;             //Read access only

            SciaRegs.SCIRXBUF.all= 0x00;

            //rsvd1;   

            SciaRegs.SCITXBUF = 0x00;

 

            SciaRegs.SCIPRI.all =0x10;  // 1 0 Complete current receive/transmit sequence before stopping 

 

            SciaRegs.SCICTL1.all = 0x0023;  // Relinquish SCI from Reset 

 

            SciaRegs.SCIFFTX.all = 0xE040; //1110 0000 0100 0000B

            SciaRegs.SCIFFRX.all = 0x204f; //0110 0000 0100 1111B

            SciaRegs.SCIFFCT.all = 0x0;    //

            SciaRegs.SCICTL1.bit.SWRESET = 1;  // Relinquish SCI from Reset

 

}          

 

Jason Wu4:

建议采用FIFO中断处理方式,根据需求,设定FIFO中断级位,主程序中定时查询FIFO结果就能避免正常数据不被遗漏。

赞(0)
未经允许不得转载:TI中文支持网 » 关于28034SCI问题的请教
分享到: 更多 (0)