搜索
bottom↓
回复: 39

如果你用的是NXP的ARM7,如果你正在做DMX512协议,那么你有福了【恢复】

[复制链接]

出0入0汤圆

发表于 2009-1-22 11:06:42 | 显示全部楼层 |阅读模式
DMX512 communication using the LPC2000 ourdev_598464.zip(文件大小:783K) (原文件名:an10717.zip) 





NXP官方提供的范例,包括DMX512协议介绍,上位机下位机电路图和全套的程序

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2009-3-16 11:34:28 | 显示全部楼层
谢谢!!

出0入0汤圆

发表于 2009-3-24 21:46:53 | 显示全部楼层
最近正为这个烦恼呢!谢谢LZ!~~~~

出0入0汤圆

发表于 2009-10-14 11:21:27 | 显示全部楼层
请教关于DMX512接收的程序里
__irq void U1_Isr(void)
{
  static int  iid;

    while (((iid = U1IIR) & 1) == 0)
    {
        if ((iid & 0x0E) == 6)             // Receive Line Status
        {
            U1LSR;                         // read LSR to clear the interrupt
            U1RBR;
            rxin = 0;
        }        
        else                               // Receive Data Available
        {
            do
            {
                DMX_buf[rxin] = U1RBR;
                if (rxin < 513)
                    rxin ++;
            } while (U1LSR & 1);           // receive data ready
        }
    }
    VICVectAddr = 0;                       // Acknowledge Interrupt
}
其中// Receive Line Status处理那一段是干什么的,另外 Receive Line Status中断表示具体单片机什么状态,谢谢各位啦

出0入0汤圆

发表于 2009-10-14 12:03:05 | 显示全部楼层
Receive Line Status
是arm7单片机内部的一个寄存器:U1IIR

出0入0汤圆

发表于 2009-10-14 12:04:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-14 12:07:49 | 显示全部楼层
这个答案有点简单了,呵呵
换句话问,单片机在什么情况下产生Receive Line Status中断的呢?与Receive Data Available中断的区别是什么?

出0入0汤圆

发表于 2009-10-14 12:46:35 | 显示全部楼层
因为这个事情是要你自己查芯片数据手册的……


(原文件名:lpc.jpg)

出0入0汤圆

发表于 2009-10-14 13:03:38 | 显示全部楼层
谢谢,刚才没有看到,现在找到了


只要Rx的输入产生4个错误条件(溢出错误-OE、奇偶错误-PE、帧错误-FE和间隔中断-BI)中的任意一个,将置位011即接收线状态标识。

另外我只找到英文手册,不知道能不能传上来一个中文的

出0入0汤圆

发表于 2009-10-14 13:40:07 | 显示全部楼层
这个NXP的文档及程序中遵守的DMX512协议中,怎么没有对发送或接收的数据进行每一帧的第10bit进行处理啊??我看DMX512协议说第10bit用来区分这帧数是起始代码或命令的,难道我看到的协议是错的??有谁有DMX512标准的协议,
网上找的协议分为三类

1.资料发送基于一种8位异步串行协议,带一个开始位(低电平)和两个停止位(高电平),没有奇偶校验;主控器发送一次为513帧,包括1帧启动代码+512帧数据。其中512帧数据代表512个设备的命令。数据格式为
            起始帧--设备1命令帧--设备2命令帧--..设备512命令帧

2.第1位是起始位0,低电平有效;第2-9位是数据位,低位在前,高位在后高电平为1,低电平为0;第10位是信号位,为0表示此帧是复位信号,为1表示此帧是数据信号;第11位是停止位,高电平有效。在进行正常数据传输之前,发送1帧复位信号,其数据为0,第10位为0,声明数据传输开始。随后进阶若干数据块,每个数据块的第一帧数据称为起始帧,第10位为1,起始帧后续数据表示对此接收设备的命令帧,第10位为1。设备总数最多512个。数据格式为  
             复位帧--数据块1(起始帧+m帧数据)--数据块2(起始帧+m帧数据)--...数据块n(起始帧+m帧数据)

3.第1位是起始位0,低电平有效;第2-9位是数据位,低位在前,高位在后高电平为1,低电平为0;第10位是信号位,为0表示此帧是复位信号,为1表示此帧是数据信号;第11位是停止位,高电平有效。主控器发送一次为513帧,包括1帧启动代码+512帧数据。其中512帧数据代表512个设备的命令。数据格式为
            起始帧--设备1命令帧--设备2命令帧--..设备512命令帧

不知道这三种哪种才是标准的!!  如果是2,则m与n各是怎么计算?!
头像被屏蔽

出0入0汤圆

发表于 2009-10-14 14:30:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2009-10-14 15:25:58 | 显示全部楼层
正好学习

出0入0汤圆

发表于 2009-10-14 15:41:23 | 显示全部楼层
Mark

出0入0汤圆

发表于 2010-8-1 09:17:12 | 显示全部楼层
QQ:1191474325  
提供DMX512产品方面的技术支持

出0入0汤圆

发表于 2010-9-13 11:28:14 | 显示全部楼层
mark

出0入9汤圆

发表于 2010-9-13 11:47:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-28 09:35:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-28 09:50:35 | 显示全部楼层
mark

出350入8汤圆

发表于 2010-10-28 10:39:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-12 00:23:32 | 显示全部楼层
绝对的好东西呀~~~~~~~~~

出0入0汤圆

发表于 2010-11-12 07:17:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-18 11:08:12 | 显示全部楼层
留待以后研究,谢谢!

出0入0汤圆

发表于 2010-11-18 12:22:47 | 显示全部楼层
DX512

出0入0汤圆

发表于 2010-11-18 13:19:10 | 显示全部楼层
DMX512

出0入0汤圆

发表于 2010-12-3 11:47:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-3 13:48:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-16 14:14:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-16 14:26:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-6 21:28:03 | 显示全部楼层
顶一下!

出0入0汤圆

发表于 2011-8-8 23:23:16 | 显示全部楼层
回复【28楼】cunlingwang 爱飞的小兵
-----------------------------------------------------------------------

是啊,怎么没有看出来对第九位的判定了

出0入0汤圆

发表于 2011-8-18 14:09:57 | 显示全部楼层
顶顶,收藏

出0入0汤圆

发表于 2011-8-18 14:20:32 | 显示全部楼层
T0TC  = 0;                                 // reset Timer counter
    T0IR  = 0x01;                              // reset interrupt flag
    T0MR0 = 92;                                // set match to 92 us
    U1LCR = 0x47;                              // 'break'
    T0TCR = 1;                                 // start timer 0
    while ((T0IR & 0x01) == 0);                // wait for timer match

    T0TC  = 0;                                 // reset Timer counter
    T0IR  = 0x01;                              // reset interrupt flag
    T0MR0 = 12;                                // set match to 12 us
    U1LCR = 7;                                 // 'mark'
    T0TCR = 1;                                 // start timer 0
    while ((T0IR & 0x01) == 0);                // wait for timer match



没有用过用过Lpc的,对于break和mark的电平控制时怎么确定的?

U1LCR = 0x47;                              // 'break'

上面是让TX发送低电平?

U1LCR = 7;                                 // 'mark'

上面是让TX发送高电平?


(原文件名:搜狗截图_2011-08-18_14-20-17.png)

出0入0汤圆

发表于 2011-10-9 16:51:01 | 显示全部楼层
mark.

出0入0汤圆

发表于 2012-12-12 17:04:30 | 显示全部楼层
very good !!!

出0入0汤圆

发表于 2012-12-18 08:30:05 | 显示全部楼层
真的有福啦,O(∩_∩)O哈哈~

出0入0汤圆

发表于 2014-7-15 21:34:56 | 显示全部楼层

very good !!!

出0入0汤圆

发表于 2015-12-17 16:57:38 | 显示全部楼层
我们用的就是这个,弄下来参考参考

出0入0汤圆

发表于 2015-12-24 15:11:27 | 显示全部楼层
可以进www.lpcware.com

出0入0汤圆

发表于 2017-5-14 10:59:27 | 显示全部楼层
谢谢分享。

出0入0汤圆

发表于 2017-6-14 13:11:27 | 显示全部楼层
参考参考,谢谢楼主分享!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 03:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表