[ZLG-ARM] 有关M0的485从机通讯的问题

[复制链接]
3030|3
 楼主| jjt1975 发表于 2010-8-25 16:45 | 显示全部楼层 |阅读模式
那位高手帮忙看看,下面的代码。我要做一个485的从机通讯程序 。现在设置好以后,发送地址帧 pariy_bit=1 的数据“05” 进不了中断。

    INT16U usFdiv;
    SYSAHBCLKCTRL |= (1ul << 12);
    UARTCLKDIV     = 0x01;
    U0LCR  = 0x83;
    usFdiv = (FAHBCLK / UARTCLKDIV / 16) / UART_BPS;
    U0DLM  = usFdiv / 256;
    U0DLL  = usFdiv % 256;
    U0LCR  = 0x03;
    U0FCR  = 0x07;
    U0IER  = 0x01;
    U0RS485CTRL=0x07;    //自动检测地址状态
    U0ADRMATCH=0x05;   //默认地址为 5  实际应用时应设置为设备的实际地

如果去掉最后面的两条语句则可以正常中断。只是数据帧,地址帧都会产生中断。如果挂在总线上,区分不了地址和数据那基本没法用啊。有没有用M0做过485总线通讯的的高手帮忙指点一下。
 楼主| jjt1975 发表于 2010-8-25 16:54 | 显示全部楼层
测试发现,要把U0LCR 中的parity enable 使能以后 U0RS485CTRL=0x03 则发送地址帧中断,数据帧不中断。但是U0RS485CTRL=0x07 时自动地址识别功能不起作用。
 楼主| jjt1975 发表于 2010-8-25 17:23 | 显示全部楼层
搞定。自己的帖子自己结:)   

要使能地址,数据帧的识别功能:U0LCR 中的parity enable 位必须使能"1"。
U0RS485CTRL=0x07    设置485地址识别的工作模式。
U0ADRMATCH=0x05    写入设备的地址。
原先调试的时候忽略了一个问题,当M0检测到一个地址帧并且地址帧内容与U0ADRMATCH一致。则产生中断。
同时U0RS485CTRL中的RXDIS位会自动清零。以后不管发送什么数据都会产生中断。只有手动将其置”1“以后可以重新进入地址检测状态
linux1 发表于 2010-8-29 15:31 | 显示全部楼层
校验位必须使能是吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

37

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部