PLD和数据通路来释放微控制器中CPU资源
0、F0可以用于一个任务,而A1、D1、F1则可用于不同的任务。 * 广泛的状态条件(例如:比较、零检测、所有个体检测、溢出检测)可以应用到累加器,数据寄存器,以及路由到器件其它地方。灵活的路由 虽然UDB在PLD和数据通路两个子系统都有很多特色,但广泛的数字路由让它们如虎添翼。信号可以在PLD和数据通路之间路由,遍及整个UDB和器件的其它地方,形成了复杂的数字系统互连(DSI)结构。 实例 本例中,用一个UDB数据通路来创建一个带重载(reload)功能的8位数字计数器。为了实现这点,连接一个状态条件回到控制存贮SRAM地址线,如图5所示。 图5:用UDB数据通路创建带重载功能的计数器。 在这个设计中,A0是计数寄存器,D0是重载寄存器。需要两个函数,一个用来递减计数,一个从周期寄存器重载计数器;这些函数在控制储存RAM里预载了。 逻辑如下:当A0不为0时,状态输出将会变低,在地址0会执行递减操作。当A0为0时,状态输出将为高,在地址1会执行重载操作。 所有操作都发生在时钟输入的上升沿,可以记录时钟沿数量。时钟输入可以来自各种时钟源。状态输出可以通过DSI路由,包括到DMA和中断请求输入。使用数据通路链和掩码模块,该计数器的大小可以是任何位数,不受限于8的倍数。 图5所示为减法计数器。它可以很容易的转换成加法计数器,可以通过使用不同的状态输出(A0= =D0)和控制存储SRAM里的不同函数:A0=A0+1和A0=A0A0。异或任何值的结果永远为0。 通过使用PLD这个简单的设计可以创造更复杂的应用。以一个红绿灯控制器为例,红绿灯控制器周期由绿、黄、红三种状态构成,因此需要一个状态机。每个状态变化到下一个状态之前会持续一定时间,所以必需有一个计数器。为了简单起见,假设“绿灯”时间和“红灯”是相同,但“黄灯”时间不同。 只需要使用3个数据通路寄存器(假设为8位计数值)就可以实现这个时序结构。A0为计数寄存器,D0为“绿”和“红”状态保持计数器重载值,D1为“黄”状态保持计数器重载值。模块框图如图6显示。 图6:采用UDB PLD和数据通路构建的红绿灯控制器框图 要保存在控制存储RAM里的操作是: A0 = A0 - 1 // 计数 A0 = D0 // 重载“绿”或“红” // 计数值 A0 = D1 //重载“黄”值 状态机在PLD里实现。数据通路条件输出反馈到PLD,以表明需要改变状态了。PLD也有这样的逻辑,根据当前的状态和从数据通路反馈的信号,控制执行哪个数据通路操作和哪个灯要点亮。 超越基础 红绿灯控制器是一种简单的应用类型,通常使用CPU编程。然而,我们已经看到,除了初始化代码,这个功能可以完全和CPU没关系而可以由智能的可配置外设完成。这个功能可以很容易地扩展以支持附加需求,例如转换信号、行人行走信号、车辆检测传感器、流量/紧急事件转发器。 CPU需要做什么 通过使用PLD和数据通路的有效组合,可以创建智能的、灵活的、低成本的外设,以减轻CPU的负担。然而,如果这么多的功能都由外设处理了,那还留着CPU做什么呢?在许多情况下,CPU不需要做很多事,在某些情况下系统初始化后,CPU就可以关掉了。不过,更实用的方案是使用CPU做CPU能做得最好的事情,例如: * 复杂的计算 * 字符串和文本处理 * 数据库管理 * 通信管理 * 系统管理 例如,在我们的红绿灯应用中,CPU可以用于以下几个方面: * 检测车辆闯红灯 * 使用相机拍摄牌照 * 从照片上提取车牌文字信息 * 从国家数据库中查阅车主信息,以及向车主发送罚单
- Nut/OS和μC/OS—II的实时调度算法比较 (04-07)
- 基于AT89C51+DSP的双CPU伺服运动控制器的研究(05-26)
- 大容量无线传输技术中高性能DSP 的启动方法(05-04)
- 双CPU在多I/O口系统中的应用(07-05)
- Windows操作系统多核CPU内核线程管理方法(01-21)
- 基于DSP和80C196双CPU构成的高速实时控制系统(01-11)