yan97ao 发表于 2009-1-22 11:06:42

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

DMX512 communication using the LPC2000 ourdev_598464.zip(文件大小:783K) (原文件名:an10717.zip) 





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

hyz_avr 发表于 2009-3-16 11:34:28

谢谢!!

linsibin.1987 发表于 2009-3-24 21:46:53

最近正为这个烦恼呢!谢谢LZ!~~~~

youxin2004 发表于 2009-10-14 11:21:27

请教关于DMX512接收的程序里
__irq void U1_Isr(void)
{
static intiid;

    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 = U1RBR;
                if (rxin < 513)
                  rxin ++;
            } while (U1LSR & 1);         // receive data ready
      }
    }
    VICVectAddr = 0;                     // Acknowledge Interrupt
}
其中// Receive Line Status处理那一段是干什么的,另外 Receive Line Status中断表示具体单片机什么状态,谢谢各位啦

icer1 发表于 2009-10-14 12:03:05

Receive Line Status
是arm7单片机内部的一个寄存器:U1IIR

ggyyll8683 发表于 2009-10-14 12:04:55

mark

youxin2004 发表于 2009-10-14 12:07:49

这个答案有点简单了,呵呵
换句话问,单片机在什么情况下产生Receive Line Status中断的呢?与Receive Data Available中断的区别是什么?

icer1 发表于 2009-10-14 12:46:35

因为这个事情是要你自己查芯片数据手册的……

http://cache.amobbs.com/bbs_upload782111/files_20/ourdev_491421.jpg
(原文件名:lpc.jpg)

youxin2004 发表于 2009-10-14 13:03:38

谢谢,刚才没有看到,现在找到了


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

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

youxin2004 发表于 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各是怎么计算?!

bbs2009 发表于 2009-10-14 14:30:10

lichangan 发表于 2009-10-14 15:25:58

正好学习

DoDo915 发表于 2009-10-14 15:41:23

Mark

lsls 发表于 2010-8-1 09:17:12

QQ:1191474325
提供DMX512产品方面的技术支持

loveraul 发表于 2010-9-13 11:28:14

mark

liangyurongde 发表于 2010-9-13 11:47:24

mark

w_y_q 发表于 2010-10-28 09:35:28

mark

seti 发表于 2010-10-28 09:50:35

mark

bmagui 发表于 2010-10-28 10:39:28

mark

dzyong 发表于 2010-11-12 00:23:32

绝对的好东西呀~~~~~~~~~

edaworld 发表于 2010-11-12 07:17:40

mark

summerrain19 发表于 2010-11-18 11:08:12

留待以后研究,谢谢!

lv998127 发表于 2010-11-18 12:22:47

DX512

moen 发表于 2010-11-18 13:19:10

DMX512

yxy1900 发表于 2010-12-3 11:47:05

mark

AG17 发表于 2010-12-3 13:48:07

mark

ssclark 发表于 2011-6-16 14:14:32

mark

Bicycle 发表于 2011-6-16 14:26:14

mark

cunlingwang 发表于 2011-7-6 21:28:03

顶一下!

lixingling 发表于 2011-8-8 23:23:16

回复【28楼】cunlingwang 爱飞的小兵
-----------------------------------------------------------------------

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

cunlingwang 发表于 2011-8-18 14:09:57

顶顶,收藏

cunlingwang 发表于 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发送高电平?

http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_668806ZD1RLU.png
(原文件名:搜狗截图_2011-08-18_14-20-17.png)

jianchangd 发表于 2011-10-9 16:51:01

mark.

hclin 发表于 2012-12-12 17:04:30

very good !!!

tospo_mwb 发表于 2012-12-18 08:30:05

真的有福啦,O(∩_∩)O哈哈~

zhiyuanzhitian 发表于 2014-7-15 21:34:56


very good !!!

yangbo18416 发表于 2015-12-17 16:57:38

我们用的就是这个,弄下来参考参考

LeiR 发表于 2015-12-24 15:11:27

可以进www.lpcware.com找

pjdu 发表于 2017-5-14 10:59:27

谢谢分享。

qmsolo2004 发表于 2017-6-14 13:11:27

参考参考,谢谢楼主分享!
页: [1]
查看完整版本: 如果你用的是NXP的ARM7,如果你正在做DMX512协议,那么你有福了【恢复】