打印

菜鸟请教28035 SCI接收问题

[复制链接]
11563|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
myr758|  楼主 | 2015-1-30 22:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
gp, IO, pi, GPIO, IAR
想用CPU查询的方式实现PC上位机发给DSP一个什么字节,DSP就回复PC一个什么字节。DSP却接收不到数据,RXRDY标志位一直为0,RXBUF也为0,只是RXWAKE标志位一直为1,不知道RXWAKE在单机通信中有何用?以下是代码,各位高手多多指教啊!
int main(void)
{
        unsigned char tx_data = 0;
        unsigned char rx_data = 0;

        #ifdef FLASH
        MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
        InitFlash();
        #endif
        InitSysCtrl();
        InitSciaGpio();

        SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                           // No parity,8 char bits,
                                           // async mode, idle-line protocol
        SciaRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                           // Disable RX ERR, SLEEP, TXWAKE
        SciaRegs.SCICTL2.bit.TXINTENA =1;
        SciaRegs.SCICTL2.bit.RXBKINTENA =1;

        SciaRegs.SCIHBAUD    =0x0000;  // 9600 baud @LSPCLK = 15MHz (60 MHz SYSCLK).
        SciaRegs.SCILBAUD    =0x00C2;

        SciaRegs.SCICTL1.all =0x0023;  // Relinquish SCI from Reset
        SciaRegs.SCIFFTX.bit.SCIRST = 1;

        while(1)
        {
                while(SciaRegs.SCIRXST.bit.RXRDY != 1);
                rx_data = SciaRegs.SCIRXBUF.bit.RXDT;
                tx_data = rx_data;
                Delay(0xffff);
                Delay(0xffff);
                Delay(0xffff);
                Delay(0xffff);

                while (SciaRegs.SCICTL2.bit.TXRDY == 0);
                SciaRegs.SCITXBUF = tx_data;
                Delay(0xffff);
                Delay(0xffff);
                Delay(0xffff);
                Delay(0xffff);
        }
}

void InitSciaGpio()
{
   EALLOW;
        GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;    // Enable pull-up for GPIO28 (SCIRXDA)
        GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0;           // Enable pull-up for GPIO29 (SCITXDA)
        GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;  // Asynch input GPIO28 (SCIRXDA)
        GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;   // Configure GPIO28 for SCIRXDA operation
        GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;   // Configure GPIO29 for SCITXDA operation
    EDIS;
}

相关帖子

沙发
zhangmangui| | 2015-1-30 22:54 | 只看该作者
SCI即串行通信接口,是一个双线的异步串口,即具有接收和发送两根信号线的异步串口,一般可以看作是UART(通用异步接收/发送装置)。F2812的SCI模块支持DSP与采用NRZ(non-return-to-zero 不归零)标准格式的异步外围设备之间进行数字通信。
F2812内部有两个单独的SCI模块,SCIA与SCIB,每一个SCI模块都各有一个接收器和发送器。SCI的接收器和发送器各具有一个16级深度的FIFO队列,它们还都有自己独立的使能位和中断位,可以在半双工通信中进行独立的操作,或者在全双工通信中同时进行操作。需要注意的是,SCIA的13个寄存器都是8位的。
表1. SCI寄存器地址映射表

使用特权

评论回复
板凳
zhangmangui| | 2015-1-30 22:55 | 只看该作者
本帖最后由 zhangmangui 于 2015-1-31 21:54 编辑

SCI即串行通信接口,是一个双线的异步串口,即具有接收和发送两根信号线的异步串口,一般可以看作是UART(通用异步接收/发送装置)。F2812的SCI模块支持DSP与采用NRZ(non-return-to-zero 不归零)标准格式的异步外围设备之间进行数字通信。
F2812内部有两个单独的SCI模块,SCIA与SCIB,每一个SCI模块都各有一个接收器和发送器。SCI的接收器和发送器各具有一个16级深度的FIFO队列,它们还都有自己独立的使能位和中断位,可以在半双工通信中进行独立的操作,或者在全双工通信中同时进行操作。需要注意的是,SCIA的13个寄存器都是8位的。
表1. SCI寄存器地址映射表

1. SCICCR

Bit(s)NameDescription
7STOP BITSSCI停止位个数,该位决定了发送停止位的个数,接收器仅对一个停止位进行检查。
    0   1位停止位
    1   2位停止位
6EVEN/ODD PARITY奇偶校验设置位,奇偶校验是否有效取决于SCICCR(5)的设置
    0   奇校验
    1   偶校验
5PARITY ENABLESCI奇偶校验使能位,如果SCI处于address-bit
multiprocesser模式(SCICCR(3)置1),地址位也包含在奇偶计算中,对于少于位的字符,剩余的无用位排除在奇偶校验之外。
    0   禁用奇偶校验
    1   使能奇偶校验  
4LOOPBACK ENA测试模式使能位,使能此位,Rx与Tx在内部连接在一起。
    0   禁止此模式
    1   使能此模式
3ADDR/IDLE MODESCI多机模式控制位,多机模式与普通模式不同,需要使能SLEEP与TXWAKE功能。多机模式增加了一个地址位到数据帧中,普通模式(空闲模式)无此位,与典型的RS232通信兼容。
    0   空闲模式
    1   多机模式
2-0SCICHAR2-0字符长度控制位,1-8位长度可选,不够8位时,SCIRXBUF和SCIRXEMU寄存器中的数据是右对齐的,且SCIRXBUF中的无用位填0,SCITXBUF中的无用位不用填0。
    000     1
    001     2
    010     3
    011     4
    100     5
    101     6
    110     7
    111     8

使用特权

评论回复
地板
zhangmangui| | 2015-1-30 22:56 | 只看该作者
本帖最后由 zhangmangui 于 2015-1-31 21:55 编辑

2. SCICTL1
Bit(s)NameDescription
7Reserved读为0,写无效
6RX ERR INT ENASCI接收错误中断使能位
    0   禁用此中断
    1   使能此中断
5SW RESET软件复位,写0,复位SCI状态机与操作标志(SCICTL2与SCIRXST),不影响其余配置位。直至写1,所有起作用的逻辑均保持确定的复位状态,系统复位后,此位写1,才可使能SCI,当检测到一个接收间断时(BRKDT,SCIRXST(5)),清除该位。SW RESET影响的标志位如下
Value After
SW  RESET     SCI Flag                    Register Bit
    1              TXRDY                SCICTL2, bit 7
    1              TX EMPTY           SCICTL2, bit 6
    0              RXWAKE              SCIRXST, bit 1
    0              PE                      SCIRXST, bit 2
    0              OE                     SCIRXST, bit 3
    0              FE                      SCIRXST, bit 4
    0              BRKDT                 SCIRXST, bit 5
    0              RXRDY                 SCIRXST, bit 6
    0              RX ERROR             SCIRXST, bit 7
4Reserved读为0,写无效
3TXWAKESCI发送器唤醒方式选择,取决于ADDR/IDLE模式的设定(SCICCR(3))
    0   在空闲模式下写1到TXWAKE,然后写数据到SCITXBUF,产生一个11个数据位的空闲周期;在地址位模式下,写1到TXWAKE,然后写数据到SCITXBUF,以设置地址位为1。
    1   传输特性别选择。
TXWAKE不由SW RESET复位,它由一个系统复位清除。
2SLEEP休眠位,根据ADDR/IDLE MODE选择的工作模式,TXWAKE选择的发送特征,在多机配置中,该位控制接收器的休眠功能。清除该位,唤醒SCI。当SLEEP置位时,接收器仍可工作,但是除非地址位被检测到,RXRDY与BRKDT,FE,OE,PE位不会被更新。当地址字节为被检测到时,SLEEP不会被清除。
    0   禁用SLEEP
    1   使能SLEEP
1TXENA发送器使能位,TXENA置位,SCITXD管脚才会发送数据,如果发生复位,只有当写入到SCITXBUF中的数据发动完毕,发送才能挂起。
    0   禁止发送
    1   使能发送
0RXENA接收器使能位,清除RXENA,停止将接收到的字符传到接收缓冲器,不产生中断,但是接收移位寄存器仍在工作,所以,如果接收一个字符的过程中,RXENA置位,完整的字符会被发送到SCIRXBUF与SCIRXEMU寄存器。
    0   禁止字符发送到SCIRXBUF与SCIRXEMU寄存器
    1   允许字符发送到SCIRXBUF与SCIRXEMU寄存器

使用特权

评论回复
5
zhangmangui| | 2015-1-30 22:57 | 只看该作者


使用特权

评论回复
6
zhangmangui| | 2015-1-30 22:58 | 只看该作者

使用特权

评论回复
7
zhangmangui| | 2015-1-30 22:58 | 只看该作者
本帖最后由 zhangmangui 于 2015-1-31 21:55 编辑

5. SCIRXST

Bit(s)NameDescription
7RX ERROR接收器错误标志,此位为BRKDT,FE,OE,PE的或值,如果对应的中断使能位有效,该位出现1,将会引起中断。在中断服务程序中,该位可以作为快速的故障检测条件。此位不能被直接复位,只能通过SW RESET或系统复位清除。
    0   无故障
    1   存在故障
6RX RDY接收器准备好标志,当此位置位时,说明SCIRXBUF中已经有一个可以被读取的字符。该位可以通过读数据,SW RESET或者系统复位清除。
    0   无需要读取的数据
    1   有数据
5BRKDTSCI传输间断检测位,冲丢失第一个停止位开始,SCIRXD连续保持10位的低电平,产生此中断。但是不会重载接收缓冲器。即使SLEEP设为1,也可以发生BRKDT中断。SW RESET或系统复位可以清除此位。检测到一个间断后,接收字符并不能清除该位。
    0   无此条件
    1   发生间断
4FE帧错误标志位,当检测不到一个需要的停止位时,置位该位。只检测第一个停止位,丢失停止位说明没能和启动位同步,字符帧发生错误。SW RESET或系统复位可以清除此位。
    0   无错误
    1   发生帧错误
3OE覆盖错误,SCIRXBUF与SCIRXEMU中的字符还未被CPU或者DMAC完全读取,新的字符又写入了SCIRXBUF与SCIRXEMU中,置位该位。前一个字符被覆盖和丢失。SW RESET或系统复位可以清除此位。
    0   无错误
    1   发生覆盖错误
2PE奇偶校验错误,使能奇偶校验时,此位有效,发生校验错误,置位该位。SW RESET或系统复位可以清除此位。
    0   无错误或奇偶检验禁用
    1   奇偶校验错误
1RXWAKE接收器唤醒检测标志位,该位为1,表示监测到了唤醒接收器的条件。RXWAKE为只读位,它由下列条件清除:
* 地址位传送到SCIRXBUF(NON-FIFO模式)后传送第一个字节
* 读SCIRXBUF
* SW RESET
* 系统复位
0Reserved读为0,写无效

使用特权

评论回复
8
edishen| | 2015-1-30 23:58 | 只看该作者
好详细的分享   

使用特权

评论回复
9
zj1| | 2015-1-31 20:33 | 只看该作者
看一下SCIRST这个寄存器的值,看是否发生了接收错误

使用特权

评论回复
10
myr758|  楼主 | 2015-1-31 21:00 | 只看该作者
zj1 发表于 2015-1-31 20:33
看一下SCIRST这个寄存器的值,看是否发生了接收错误

这个寄存器的值一直为0x0002
就是RXWAKE位一直为1

使用特权

评论回复
11
myr758|  楼主 | 2015-1-31 21:02 | 只看该作者
zhangmangui 发表于 2015-1-30 22:58
5. SCIRXST

感谢版主这么详细的分享,但是数据手册我还是有的。
能否帮忙看一下程序解答一下问题?

使用特权

评论回复
12
liubinghui| | 2015-8-4 23:11 | 只看该作者
    谢谢了!

使用特权

评论回复
13
sunmenglin| | 2016-3-4 23:49 | 只看该作者
楼主,你的问题后面是怎么解决的呀?我碰到了和你一样的问题,谢谢指点!

使用特权

评论回复
14
micky0422| | 2017-2-7 14:36 | 只看该作者
楼主 ,我现在也有同样的问题,请问是如何解决,谢谢

使用特权

评论回复
15
chenci2013| | 2017-2-8 22:45 | 只看该作者
查看了硬件电路有问题吗?

使用特权

评论回复
16
chenci2013| | 2017-2-8 22:47 | 只看该作者
电路是需要共地的,这样才能电压基准一致。

使用特权

评论回复
17
232321122| | 2017-2-9 22:30 | 只看该作者
zhangmangui 发表于 2015-1-30 22:54
SCI即串行通信接口,是一个双线的异步串口,即具有接收和发送两根信号线的异步串口,一般可以看作是UART( ...

检查硬件没有问题吗?

使用特权

评论回复
18
232321122| | 2017-2-9 22:32 | 只看该作者
zhangmangui 发表于 2015-1-30 22:54
SCI即串行通信接口,是一个双线的异步串口,即具有接收和发送两根信号线的异步串口,一般可以看作是UART( ...

使用示波器测量相关的信号是否正确?

使用特权

评论回复
19
shenmu2012| | 2017-2-10 21:28 | 只看该作者
RXWAKE标志位一直为1,,表示一直有数据被接受到的

使用特权

评论回复
20
dzfansman| | 2017-2-10 22:59 | 只看该作者
这个SCI的接口电路是不是完整

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝