某控制信号处理系统中,选用adsp-bf561作为主控机,外接键盘,lcd显示屏,标准rs232接口,实时时钟等,通过dsp编程来实现对各个功能模块控制,同时产生多路数字io信号。该控制系统还包括电源、时钟、cpld、flash,jtag调试器、复位电路等基本组成部分,系统框图如图1所示。
图1 基于adsp-bf561控制信号处理系统框图
系统电源模块选用tps54350来实现,外围电路不同rc值,可以构成不同输出电压,这里需要产生是5v、3.3v、1.25v三种电压。时钟电路由48mhz晶振电路来实现,其输出作为dsp外围时钟和cpld时钟。flash用于存储用户应用程序,jtag调试口在dsp电路设计中也是必不可少。后面对各个部分一一介绍,特别是对复位电路,数字io信号产生,以及rs232接口进行详细介绍。
1.键盘
键盘选用是4×4扫描键盘,如图1所示,由blackfingpio接口pf5~pf12来实现。其中,key_gp3~key_gp0为行线输入端,初始化为带上拉电阻输入口,中断使能(下降沿触发);key_gp7~key_gp4为列线输出端,初始化为输出低电平。键盘扫描方法同常规扫描键盘方法相同。
图 1 扫描键盘结构图
2. lcd显示屏
lcd显示屏采用320x240lcd液晶模块。320x240液晶模块配用sed1335驱动接口板,sed1335驱动接口板上配用32kram。lcd除了读写信号线由blackfin读写信号来控制以外, 8位数据线由blackfin低8位数据线锁存输出,以及其使能信号由blackfinams3控制,lcd地址分配为0x2c000000。电路连接如图2所示。在对lcd进行控制时,除了要建立在lcd上显示汉字和英文字库以外,还要编写对sed1335底层驱动程序。这可以在lcd自带驱动程序基础上,进行代码移植,把它改写成适合bf561dsp程序。
图 2 lcd连接示意图
3.实时时钟
控制系统实时时钟选用了芯片ds1337来实现。ds1337是一个低功耗串行实时时钟芯片,它有24h/12h制两种模式,它可以输出年、月、日、分、时、秒形式。它采用i2c协议,blackfinpf0和pf1作为i2cclk和data,而pf3作为实时时钟中断flag,其电路连接示意图如图3所示。
图3 实时时钟电路连接示意图
4.复位电路
为了保证dsp在上电或按下复位键时能可靠复位,一般加一个复位延时电路,选用max708s来完成,如图4所示。
图4 复位电路
在上电过程中,reset信号会在vcc达到稳定电压后一段时间内(约200ms)保持为高,然后再变低。 信号为reset“not”,即 会相对vcc延时一段时间后再变高,如图5所示。这样,在dsp各电源电压已稳定情况下,dsp复位信号仍为低有效,就可以保证dsp正常复位。
图5 上电过程中 信号
在上电以后,如果手动按下开关,使得mr上信号由高→低→高,产生一个低脉冲,这时, 管脚上也会输出一个低脉冲,只是其低电平持续时间比mr上低电平持续时间长200ms左右,以保证dsp复位可靠完成,如图6所示。
图6 手动复位时 信号
5. 数字io信号产生
在该控制系统中,要求产生8路数字io信号。如果把这8路数字io信号看成一个8bit数,则需产生一个有限长度非方波编码信号,如下图所示。在t0时刻需要产生数字io信号为stat0,比如说10010101;在在t1时刻需要产生stat1,…,在tn时刻需要产生statn,而且t0可能不等于t1或tn,stat状态也各不相同。
图7数字io信号状态
这里选用bf561看门狗定时器(watchdog timer)来实现。在看门狗定时器操作中,先将计数值写入寄存器wdog_cnt中,然后看门狗定时器自动将wdog_cnt值写入寄存器wdog_stat。接着通过寄存器wdog_ctl使能watchdog timer,看门狗定时器开始计数,逐次减小wdog_stat值,直至为0,这时预先编写程序事件就会发生。要想输出一个8bit数据,只需往某地址单元写数,对应数据线就会写出该数据。为了把该数据保持一段时间(tx长度),还需使用锁存器将该数据锁住。所以在bf561dsp程序中先定义了数字io信号对应中断事件,且中断优先级较高,这是为了保证定时精确度,防止别事件干扰。
register_handler(ik_ivg9, dio_wdoga_isr);
然后在中断事件里,把当前要写入数据写到某地址单元上,然后使能watchdog timer,再将定时器值写入wdog_cnt中。定时器计数是以sclk为基准,程序代码如下:
*pdio_data_port = codes;
*pwdoga_ctl =disable_wdog;
*pwdoga_ctl |=wdog_expired_bit;
*pwdoga_cnt =times;
*pwdoga_ctl = enable_gpi;
codes和times就是当前要产生数字io编码和长度。由于是一系列编码,可以用数组索引形式,将当前值写入。而我们事先定义dio_data_port地址为0x24000000,这对应bf561ams1地址空间,所以用ams1作为锁存器使能信号,将数据线上数据通过锁存器以后再输出,如下图所示
图8 数字io锁存器
6.标准rs232接口
为了让控制系统与计算机之间可以进行数据相互传递,系统采用max3232芯片来实现,如图9所示:
图9 bf561与计算机之间串口通信框图
bf561uart遵循异步串行通信协议,包括:5-8个数据位;1、11/2、2个停止位;有/无奇偶检验。而波特率满足
其中,sclk是dsp系统时钟频率,divisor值介于1~65536,可以由timer寄存器相应值得到,满足关系式
在bf561初始化设置中,将uart设为8bit数据模式,同时将timer2设置为wdth_cap模式,用timer2去捕获串口数据变化率,而timer2位于tmrs8寄存器里,程序初始化代码如下:
*puart_lcr = wls(8);
*puart_mcr = loop_ena;
*ptmrs8_disable = timdis2;
*ptmrs8_status = trun2 | tovl_err2 | timil2;
*ptimer2_config = tin_sel | irq_ena | period_cnt | wdth_cap;
*ptmrs8_enable = timen2;
*puart_gctl = ucen;
在程序一开始,就会按照初始化设置进行自动波特率检测。当有字符输入时,timer会测量连续2次下降沿宽度,并返回到timer所对应period寄存器里。比如说,如果发送”@”(0x40h)作为自动波特率检测,发送时包括起始位,总共为8bit,如图10所示。
图10 自动波特率检测字符”@”(0x40h)
此处period大小如上图所示,捕获uart bits为8位,所以得到
再根据波特率公式,就可以求得波特率大小。此段程序代码如下:
period = *ptimer2_period; //返回period值
divisor = period 》》 7; //右移7bit就相当于除以16×8
baudrate = sysclk/16/divisor; //得到波特率
结论
整个控制系统是以lcd显示界面为基础,按提示进行相应键盘操作。经过测试,该系统各部分工作正常,无相互干扰现象。实时时钟定时精确,可以达到秒级。数字io输出波形编码无乱码,定时精度可达毫秒级。rs232接口传输数据时,以高达115200bit/s波特率传输,误码率小于5%。该控制系统已成功应用于某雷达系统控制子系统。
飞利浦幻彩LED冰酒灯 给你最浪漫的氛围
iPhone升级前后性能大PK,iOS10.3速度并没快多少
金航标萨科微宋仕强 深圳华强北为什么亿万富翁多?(一)
小米MIX自觉靠边,5.24号“创·无界”的媒体沟通会,夏普无边框手机又要来了?
DFX极大地提高了Xilinx FPGA芯片的灵活性
基于ADSP-BF561实现LCD显示界面控制系统的设计
怎样使用PIXEL桌面环境升级树莓派的Raspbian操作系统
刘作虎暗示一加8系列将有新配色
AI提供的落子胜率可以直接比较大小吗
自动切换黑暗模式功能有望在Android 11中重新上线
可靠的选择,WD Blue SN550 2TB助力制图PC
腾讯宣布推出消费券功能 未来将支持更多省市政府发放
特斯拉自燃情况分析 知道热失控原理很重要
7812引脚图_7812典型应用电路图
轨道检查时利用无人机进行电力巡检更快速、准确
顾海巍:新基建背后的新数据挑战
工业物联网的成功,有助于制造商数字化转型
VGA接口驱动设计
不止骁龙835,小米6或搭载联发科X30亮相,两个版本
利用3D打印复制骑马者青铜雕像