4.6.2系统扩展接口电路设计
系统扩展接口主要包括按键接口,蜂鸣器接口两部分。其中,按键接口外接 +3.3V电源,在有按键按下再抬起时形成下降沿用于触发ARM中断;蜂鸣器接 口的主要作用是在ARM接收端接收到有效数据蜂鸣器发声,提示用户收到数据, 该接口利用S3C4480x的GPE6线,通过MM74HC04M反向器将GPE6输出的
低电平翻转并经过9014三极管放大,驱动蜂鸣器发声,在设计中,外接了二极 管避免了蜂鸣器产生的振荡电流对接口的影响,图4.17为上述接口的原理图。
第四章红外激光通信系统硬件平台的设计
图4.17按键蜂鸣器接口原理图
4.7 PCB印刷线路板的设计
4.7.1红外调制解调模块PCB设计要点
针对红外调制模块的PCB设计的主要问题在于如何避免产生红外激光的瞬 间强电流对于电路中易损件的冲击。因此在PCB布线时,采取以下措施:图4.18 为红外调制模块的PCB设计图。
l、尽量采用45。角布线的原则,减少信号传输中的“死角”。 2、信号线和电源线采用30~50mil的粗线(1mil=0.0254mm)。 3、将集成电路NE555(U1)与大功率元器件红外激光管(LD)远离放置,周
围放置保护电容CUl,防止激光管工作时的电流冲击。
4、电位器RWl,RW2放置在易调节的位置,方便操作。
第四章红外激光通信系统硬件平台的设计
图4.1 8激光调制模块PcB图
解调模块的PcB设计相对比较简单,主要技术工作集中在将5块TsOPl738 集成在一块PcB中,这样做的目的在于增人接收面积,使发送方不必精确对准 发送模块,只需要方向上保持一致即可。红外激光解调模块PcB见图4·】9。 图4.19激光解调模块PcB目
第四章红外激光通信系统硬件平台的殴计
4 7 2ARM主板PcB设计
本文在设计ARM主扳时主要考虑了以下问题:
】、ARM核心板Fs4480本身具有振荡电路,分频电路,在工作时可能会对主板 上的反向器,集成电路等元件造成干扰。为了避免该问题,对ARM主板表 面进行了覆铜处理,增强了主板的抗干扰性。
2、主板上接口较多,有些模块的安装具有方向性,极性错误很可能导致模块损 坏,因此在主板上明示了模块的安装方向,并合理的安排了接口问的布局, 为模块的安装预留了充分的空间
3、MAxl 703输出最大电流达到1 5A,在布线叫也采用了50m1I的电源线和地
线。基于以上几点.本文设计ARM主板如图4-20所示:
4 8本章小结 图4—20ARM主板PcB圈
本章是本文的重点章节,主要介绍了红外激光通信系统硬件平台搭建的整个 过程。在硬件设计部分中,红外调制解调模块的设计足本章的亮点,针对红外激 光工作特性,本文设计了一种低占空比可调式直流脉冲生成电路用咀驱动激光管 的工作,并在关键部分墩置限流电阻和保护电容,保证系统的稳定工作。在PcB 设计巾,本文充分运剧各种设计手段,提高丁系统抗强电流干扰能力。在实践中, 本文设计的硬件平台运行稳定可靠,没有出现团强电流冲击导致元器件损坏的情
}兕。
第五章基于S3C4480X的ARM驱动层程序实现
第五章基于S3C44BOX的ARM驱动层程序实现
5.1红外激光通信系统驱动程序整体设计思路
红外激光通信系统的主要任务是实现数据的远距离传输工作,因此在设计本 系统驱动程序之前,第一步要做的工作是分析整个系统中的数据流,确定利用。 S3C4480X芯片上的哪些资源。ARM系统中的数据流如图5.1所示
, 、r 1 , 、
欲发送信息
虎-一一小
信息通过蓝牙发送到——-^ ARM暂存蓝牙发送的信
暂存于PDA k——√ ARM,并可以回送到———∥ 息,并逼过UART发送到
由PDA确认数据是否碓确红外调制模块并输出
L J L J L J
被发送信息 显示在PDA 上
ARM将接收到的数据进 行合法型判断,判断是完 整的数据包,经蓝牙发送 TSOPl738解调模块接收
红外数据,通过UA盯接
收到ARM系统处理
臣困
图5.1红外通信系统整体数据流向图
首先确定的是,删主板上主要包括红外调制解调模块和蓝牙模块两部分。
由于红外激光传输的单向性,因此可以认为在发送方和接收方通信模式中,红外 传输数据流是单向的,为了保证数据传输的单向性,在系统驱动程序设计中,本 文将发送方和接收方的驱动程序分别设计,即发送方的ARM系统只负责向通过 红外激光外发送数据,而接受方负责接收该数据并确认该数据是否合法有效。但 对于蓝牙模块来讲,则没有这种数据传输方向性的限制,一旦建立蓝牙连接,双 方可以进行全双工的通信。因此在设计时需要将红外模块和蓝牙模块分别处理, 本文中利用S3C4480x自带的两组uART实现了上述两组模块的数据传输问题。 另外,如何控制数据的发送和接收是需要驱动程序解决的另一个问题,通过
分析数据流,本文认为,AI洲上的主要的中断发生在有数据到来的时刻,
第五章基于S3C4480X的ARM驱动层程序实现
S3C44BOX对于UART上的数据读取有专门的中断pISR。URXD0,pISR。UIⅨDl 当uART上有数据到来需要读取是,触发该中断,通过设置中断入口向量,系
统自动转到相应的中断服务程序。对于发送端,还需要添加按键中断,当有按键 按下时,中断触发,ARM将暂存的信息通过红外调制模块发送。 通过上述分析,本文设计ARM驱动方案如下:
l、发送端,接收端的UART0作为蓝牙与ARM的通信管道,UARTl作为红外
模块与Al洲的通信管道。
2、发送端设置中断Eint4567lsr()和Receivejntemlpt(UARTO)。 3、接收端设置中断ReceiVe—Intemlpt(UARTl)。 5.2发送端驱动程序设计与实现
发送端驱动程序设计的主要工作集中在MCU工作端口初始化,中断向量与 中断服务程序映射关系的建立以及中断服务程序的编写工作。图5-2为发送端驱 动程序流程图。在具体实现过程中,分为MCU内核的初始化和中断服务程序编 写两部分。
图5.2发送端AItM驱动程序流程图
第五章基于S3C4480X的ARM驱动层程序实现
5.2.1发送端MCU内核初始化
在S3C44BOX加电工作时,其需要设置一些寄存器的值,使其能够满足本系 统工作的需要,在本系统中S3C4480X的初始化主要完成以下步骤: 1、CACHE初始化:
设置rSYSCFG=CACHECFG: //允许写BuFFER,使用8KBCACHE 2、端口初始化:
通过Port lnit()函数实现,本文中主要用到S3C44BOx的G端口,因此在
Polt Init()函数中添加如下代码:
rINTCON=0x 1:
//设置中断模式为矢量中断模式,允许MCU响应IRQ,禁止响应FIQ。
rPCONG=0xf骶//开启所有中断EINTl~7
rEXT附T=Ox22222222: ∥设置中断触发方式为下降沿触发
rINTMsK=~(BIT—GLOBAL IBIT—EINT4567IBIT—-URxD0);
//设置中断屏蔽寄存器,屏蔽除GLOBAL(全局中断),EINT4567(按键 中断),URXDO(UART0口读数据中断)以外的所有中断。 3、ISR(中断服务程序初始化): 通过函数ISR Init()实现,主要包括: pISR_E烈T4567=(int)Eint4567Isr; pISR_URXD0=(unsigned)ReceiVe_lmerrupt;
/木关联中断向量地址和中断服务程序的入口地址,在S3C44BOx中 pISR_EⅣT4567被声明为(IsR_STARTADDRESS+0x74),plsR-URXDO被声 明为(ISR STARW山DRESS+Ox3c)由于中断被设置成下降沿触发,当上述两 向量地址上出现一个高低电平转换时,转到对应的服务程序进行处理。枣/ 至此,发送端驱动程序初始化工作完成,初始化完成后,系统进入循环等待 状态,直到MCU响应某中断,转入相应的中断服务程序。 5.2.2发送端中断服务程序的实现
函数Eint4567Is“void)为发送端按键中断处理函数,其功能是通过按键把 keyBufa中的数据通过UAI玎l的TXl发送出去,如图5-3所示:
外部中断源:
按键
蝴她H=蠹赫掣呲邮
图5.3按键中断程序功能说明
4l
第五章基于S304480x的ARM驱动层程序实现
关键代码实现如下:
rEXTnⅥTPND=Oxf.
n—lSPC=B11i-EINT4567; Uarc-Select(1); Uart-SendString(head); UaILSendString(keyBuf.a);
Uart--SendString(keyBufa);
Uart-SendString(keyBufIa); Uarc-SendString(tail);
//由于EINT4567共享一个中断源在每次进入、 E烈T4567中断时都要清除EXTmTPND寄存器。 ∥清除I ISPC寄存器与被响应中断对应的 pending位,代表MCU已经响应该中断。 //选择UARTl,数据发送到红外调制模块 //发送头部信息。
∥发送有效信息三次,在接收端校验。 ∥发送尾部信息。
函数Receive-Interrupt(void)为发送端数据接收中断处理函数。数据从 uARTO口接收,它的功能是将发送端PDA经蓝牙发送过来的信息暂存并发回 PDA进行校验,见图5.4。
外部中断源: 待发送信息通过蓝牙输出到发 uARTO接收中中断处理送端ARM系统,等待经红外发 断送。
图5-4 ReceiVe_IntemIpt()功能说明 关键代码包括以下部分:
rI ISPC=BIT uRxDO: //清除中断标志位
data=RdURxHO(); //通过UART0的IⅨO来接收PDA传过来的数据。
i弼<100)
{keyBufD++]=data;
if(data—t\r’) ∥读到数据尾部 {m.j;
for(k=0;k keyBufa[k】_keyBuf【k】;∥开辟缓冲专门存放有效数据 Uan Select(O); //选择蓝牙串口UART0 uan-Sendstring(keyBuf);//目的把接收的数据回传给PDA,验证通 过蓝牙传输的数据是否正确。 j=O;}) 42 第五章基于S3C4480X的ARM驱动层程序实现 else {j=O; Uan-Select(O); UatPrintf(1tBu仃er Overnow!\n’’);//超出缓冲区大小,报错退出。 5.3接收端驱动程序设计与实现 红外激光通信系统接收端和发送端相比由于不需要按键发送信息,所以只需 要设计一条针对UARTl口数据接收中断。程序架构与发送端类似,只是有功能 上的不同,具体流程图见图5.5。 图5.5接收端驱动程序流程图 由于工作模式类似,接收端的内核初始化过程和发送端基本相同,不同仅在 于rINTMSK(中断屏蔽寄存器)设置和ISR初始化过程。因此,在本节只是简要 介绍其不同之处,其余过程不在赘述: 第五章基于S3C44BOX的ARM驱动层程序实现 11fNTMSK=一(BIT-GLOBALIBIT.』RXD 1); ∥屏蔽除GLOBAL(全局中断),URXDl(uARTl口读数据中断)以外的所有中断。 pISlt』RXDl=(unsigned)ReceiVeLIntelTupt; //关联中断向量地址pISR I爪xDl和中断服务程序ReceiVe-IntemIpt()。 5.3.1接收端中断服务程序实现 接收端中断服务程序主要作用是实现数据的缓存,为发送给PDA做准备, 在这设计期间采用过两种方案:一是实现数据的转发,由于接收端是按字节接收 数据,因此在每接收到一个字节之后就通过蓝牙向PDA转发一个字节,但由此 带来一个问题就是数据完整性的不到判断,无法实现接收到一个完整数据包时让 蜂鸣器工作。因此采用了第二套方案,将接收到的数据缓存,等读取到结束标志 时,再判断缓冲区中的数据包是否完整,具体流程详见图5.5。 中断服务函数Receivejntemlpt(void)关键实现代码如下: rI ISPC=BIT u1ⅨD1; //清除中断标志位 data=RdURXHl(); //接收数据。 if(data!=’#’) { if((data>=’a’)&&(data<_’z’))∥判断接收数据的合法性,合法数据暂存 { reTemp[countre】-data; COUntre++; retUm: ) ??同上,主要判断是否为数字和大写字母等 else {coun仃e=O;∥读到其它字符,如乱码重新读 retIJln: ) }∥读到报尾结束标志,判断报尾前4.bit数据是否符合协议定义 else if((reTemp[counter.4]==tb’)&&(reTemp[counter-3】_2’1’)&& (reTemp【counter-2】==’a‘)&&(reTemp[counte卜l】=亍’O’)) {