【海思HI3520之QT开发】-串口通讯实战(一):UART加载到内核

MacianYuan 2020-08-11 17:39:02 4303
  • 环境: Ubuntu 12.04-64bit
  • 硬件平台: Hi3520D_V100
  • 内核版本: linux-3.0.y
  • Qt版本: qt4.8.6
  • 编译器: arm-hisiv100nptl-linux-gcc
  • 作者: MacianYuan
  • 原文链接: https://www.ebaina.com/articles/140000004191

摘要:
1、 在Hi3520平台下,增加UART加载到内核
2、 修改内核文件,制作内核镜像。
3、 增加UART3方法

第一节 修改内核文件,增加UART加载到内核
一、内核配置初始化,拷贝固定内核配置替换现有的配置
//清内核
make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- clean
//进入内核根目录下
cd /home/vmuser/sdk/Hi3520D_SDK_V1.0.5.0/osdrv/kernel/linux-3.0.y/
//拷贝.config 文件
cp arch/arm/configs/hi3520d_full_defconfig .config
二、修改内核相关文件
//修改内核相关文件
cd /home/vmuser/sdk/Hi3520D_SDK_V1.0.5.0/osdrv/kernel/linux-3.0.y/arch/arm/mach-hi3520d
//编辑core.c 文件
vi core.c
(1)管脚复用配置:

(a)管脚复用宏定义

/*  复用寄存器基地址    */
/*      复用寄存器基地址        */
#define         REG_UART_BASE_ADDR              0x200F0000                      
/*      UART1_RXD偏移寄存器     */
#define         REG_UART1RXD_OFFSET             IO_ADDRESS(REG_UART_BASE_ADDR + 0x050)  
/*      UART1_TXD偏移寄存器     */
#define         REG_UART1TXD_OFFSET             IO_ADDRESS(REG_UART_BASE_ADDR + 0x058)  
/*      UART2_RXD偏移寄存器     */
#define         REG_UART2RXD_OFFSET             IO_ADDRESS(REG_UART_BASE_ADDR + 0x05C)  
/*      UART2_TXD偏移寄存器     */
#define         REG_UART2TXD_OFFSET             IO_ADDRESS(REG_UART_BASE_ADDR + 0x060)  
/*      UART端口复用配置        */
#define         uart_reuse()({\
                        writel(0x01,REG_UART1RXD_OFFSET);\
                        writel(0x01,REG_UART1TXD_OFFSET);\
                        writel(0x01,REG_UART2RXD_OFFSET);\
                        writel(0x01,REG_UART2TXD_OFFSET);\
                        })

(b)《Hi3520D/Hi3515A/Hi3515C H.264 编解码处理器用户指南》(P70)

复用寄存器基地址:

UART 偏移地址:

(2)串口初始化配置

(a)增加uart1、uart2配置信息:

//修改core.c 文件  在第310行uart0配置信息下增加
HIL_AMBA_DEVICE(uart0, "uart:0",  UART0,    NULL);
HIL_AMBA_DEVICE(uart1, "uart:1",  UART1,    NULL);
HIL_AMBA_DEVICE(uart2, "uart:2",  UART2,    NULL);

static struct amba_device *amba_devs[] __initdata = {
        &HIL_AMBADEV_NAME(uart0),
        &HIL_AMBADEV_NAME(uart1),
        &HIL_AMBADEV_NAME(uart2),
};

(b)修改串口amba_device 结构体,配置串口初始化:(AMBA:片上总线协议)

//修改core.c 文件  在第323行配置信息下增加
static struct clk_lookup lookups[3];

static void  uart_clk_init(unsigned long clk)
{
        uart_clk.rate = clk;

        lookups[0].dev_id = "uart:0";
        lookups[0].clk = &uart_clk;

        lookups[1].dev_id = "uart:1";
        lookups[1].clk = &uart_clk;

        lookups[2].dev_id = "uart:2";
        lookups[2].clk = &uart_clk;

        uart_reuse();
}
(3)增加串口中断配置信息

(a)切换目录,增加irqs.h配置信息

cd /home/vmuser/sdk/Hi3520D_SDK_V1.0.5.0/osdrv/kernel/linux-3.0.y/arch/arm/mach-hi3520d/include/mach
//修改irqs.h 文件  第10行
#define UART0_IRQ               (HI3520D_IRQ_START + 8)
#define UART1_IRQ               (HI3520D_IRQ_START + 9)
#define UART2_IRQ               (HI3520D_IRQ_START + 10)
第二节 配置内核文件,制作内核镜像
三、配置内核

(1)海思加载的串口驱动是PL011,make menuconfig 配置Device Drivers > Character devices > Serial drivers中的ARM AMBA PL011 serial port support 和 Support for console on AMBA serial port

//进入内核配置界面 
make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig

(2)修改后的结果

(3)重新编译内核烧入

//编译内核
make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- uImage
//拷贝编译好的内核到指定目录下
cp arch/arm/boot/uImage /mnt/
ping 192.168.100.128
setenv serverip 192.168.100.128
sa

(4)修改tftp服务器和客户端ip地址,通过tftp烧写内核镜像

(5)烧写内核

mw.b 82000000 ff 400000
tftp 82000000 uImage
sf probe 0
sf erase 100000 400000
sf write 82000000 100000 400000
reset   # 重启进入新系统。

(6)烧写结果

四、验证串口并应用

在/dev 下可以查看是否有串口设备ttyAMA0~2。

第三节 增加UART3方法

由于之前没有增加UART3 ,后在项目中UART1 UART2 都被占用,贴出增加UART3方法。
UART3和上述UART1 UART2相同。主要是在《Hi3520D/Hi3515A/Hi3515C H.264编解码处理器用户指南.pdf》P98 手册中查找到复用引脚。

  • muxctrl_reg46 GPIO1_0 管脚复用控制寄存器
    UART3_TXD 对应普通GPIO1_0 Offset Address 0x0B8

  • muxctrl_reg47 GPIO1_1 管脚复用控制寄存器
    UART3_RXD 对应普通GPIO1_1 Offset Address 0x0BC

除此配置与UART1 UART2不同之外,其他都按照UART1 UART2添加即可。

附件:《Hi3520D/Hi3515A/Hi3515C H.264编解码处理器用户指南.pdf》

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 5 6 评论 打赏
评论
3个
内容存在敏感词
手气红包
  • ymc123 2020-08-17 10:25:48
    回复

    用到了,

  • 哗啦啦~ 2020-08-14 19:42:13
    回复

    66666

  • 像风一样 2020-08-12 14:34:08
    回复

    666666666666666666666666666666

相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
MacianYuan
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区