注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控博客苑 -- 莱得科技 -- 基于i.MX27处理器串口扩展设计详解

中国工控网搜索:

杨先生

     学历:硕士研究生
     职称:高级工程师
     年龄:51岁
       新闻信息(0/0)
       工作图片(0)
       技术论文(3/1)
       交流论坛(0/0)
       留言信箱(0)
       浏览人次:4660

基于i.MX27处理器串口扩展设计详解

发表评论(1)   作者:杨先生    发布时间:2011年10月17日  

    基于i.MX27处理器串口扩展设计详解
    摘要:介绍在i.MX27芯片上利用16C652芯片来扩展串口的方案,详细阐述i.MX27芯片与16C652芯片之间的接口设计、CPLD设计、驱动设计。
    关键词: i.MX27; 16C652; 串口扩展; ARM9嵌入式系统;工业控制。
     引 言
    在工业控制中需要的大量的现场控制总线,如CAN,Profibus,MODBUS,RS485/RS422,RS232.同时在工业控制,仪器仪表,医疗器械等非消费类领域,嵌入式处理器占到绝大部分,而作为控制中枢的嵌入式处理器串口往往只有三、四个,为了实现对多个外设的控制,需要对串口进行扩展。ARM芯片是目前在嵌入式系统中应用得最多的一种处理器内核,可运行linux、WINCE、VxWORKS等操作系统,拥有包括LCD、串口、网络通讯、存储芯片等大量外围接口。开发板平台使用成都莱得的FlexG1工控板.
    注:本文章只介绍扩展2个串口的设计,需要扩展4个串口选用 16C654即可,如果需要增加更多的串口,增加16C654即可增加UART扩展个数,设计思路完全相同。
     硬件设计
    图1 串口扩展硬件图
   

chinakong.com中国工控网


    在图1中,电路图由4部分组成:i.MX27处理器、CPLD、16C652、DB9连接器。其中i.MX27处理器和DB9连接器没有在图中画出来。片选选用i.MX27的CS4,起始地址为:0xD400 0000
    ,地址信号A0,A1,A2决定了16C652不同的寄存器。
     CPLD设计
    CPLD实现如下几个功能:电平转换:由于i.MX27的WEIM总线为1.8V,需要CPLD实现1.8V-3.0V的电平转换;UART片选、读写信号:16C652的两个串口的片选信号由CS4_B和GPIO_CS4产生。GPIO_CS4为0,以及CS4_B为0,UART_CSA片选有效;GPIO_CS4为1,以及CS4_B为0,UART_CSB片选有效;
    详细CPLD代码如下:
    library ieee;
    use ieee.std_logic_1164.all;
   
    entity UART is
    port(
    A:in std_logic_vector(0 to 2);
    UART_A:out std_logic_vector(0 to 2);
    D:inout std_logic_vector(0 to 7);
    UART_D:inout std_logic_vector(0 to 7);
   
    GPIO_CS4:in std_logic;
    CS4_B:in std_logic;
    OE_B:in std_logic;
    RW_B:in std_logic;
   
    UART_CSA_B:out std_logic;
    UART_CSB_B:out std_logic;
    UART_OE_B:out std_logic;
    UART_RW_B:out std_logic
   
    );
   
    end;
   
    architecture control of UART is
   
    begin
   
    -- Chip Select Outputs
   
    UART_CSA_B <= '0' when (CS4_B = '0' and GPIO_CS4 = '0') else '1';
    UART_CSB_B <= '0' when (CS4_B = '0' and GPIO_CS4 = '1') else '1';
    -- level shift
   
    UART_A<=A;
   
    UART_OE_B <= '0' when (OE_B = '0' and (UART_CSA = '0' or UART_CSB = '0')) else '1';
    UART_RW_B <= '0' when (RW_B = '0' and (UART_CSA = '0' or UART_CSB = '0')) else '1';
   
    process(D,UART_D,UART_OE_B,UART_RW_B,UART_OE_B)
    begin
    if (UART_OE_B = '0') and (UART_RW_B = '1') then
    D <= UART_D;
    elsif (UART_OE_B = '1') and (UART_RW_B = '0') then
    UART_D <= D;
   
    else
    D<="ZZZZZZZZ";
    end if;
    end process;
   
    end control;
     软件的设计
    sc16c652是一款集成了2路标准异步串行收发器的串口扩展芯片,也就是通常所说的8250兼容串口。它的操作方法和寄存器功能与8250完全兼容,因此我们可以用基于linux内经典的8250驱动来驱动sc16c652,只需要根据硬件的设计,稍微修改一下标准的8250驱动,下面我们就在8250驱动的基础上根据硬件的设计来实现sc16c652的驱动程序
   
    首先来看看硬件上是如何来实现双串口的收发流程的。根据cpld程序的逻辑,当驱动访问 0xD400_0000----0xD5FF_FFFF 这32M地址空间的时候,CS4_B引脚会自动变为低电平。然后可以通过控制GPIO_CS4来选择串口号,当GPIO_CS4为高电平的时候,CPLD的输出为低的时候UART_CSB_B为低,选中串口A,当GPIO_CS4为低电平的时候,CPLD输出UART_CSA_B为低,选择串口B,这样就实现了串口号的逻辑选择,然后数据接收采用中断方式,我们硬件设计如下
    MX27_PIN_SSI1_FS: gpio 输出 做串口芯片的复位引脚,下降沿复位100us
    MX27_PIN_SSI1_TXDAT: gpio 输入 禁止上拉 上升沿触发 串口1的接收中断引脚
    MX27_PIN_SSI1_RXDAT: gpio 输入 禁止上拉 上升沿触发 串口2的接收中断引脚
    由以下两个引脚来决定选中那个串口号
    MX27_PIN_SSI1_CLK : gpio 输出 也就是GPIO_CS4 可以用来选择串口号 [0--->串口1 1-->串口2]
    CS4_B: 输出,当我们0xD400_0000----0xD5FF_FFFF这段地址的时候,始终保持为低电平
   
    硬件设计清楚后,然后,我们来设计软件部分,首先需要在板级初始化文件 arch/arm/mach-mx27/mx27mdk27v0.c中,做如下初始化
    1.根据硬件设计<
 

 评论仅代表评论人个人看法,不表明博客主人及中国工控网同意其观点或其描述 共1条评论  共1页  第1页  

 评论人署名:zgf3200 评论时间:2014/12/19 10:16:00

我要发表评论 

    学习了

共1条评论 共1页  第1页  

    发表评论

登陆网站发表评论

用户名:

密码:

注册 | 忘了密码

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳