海思HI3518内核中开启UART2的方法
来源:互联网 发布:网络市场具体有哪些 编辑:程序博客网 时间:2024/04/29 05:44
海思HI3518 SOC提供 了3个 UART(UniversalAsynchronous Receiver Transmitter异步串行通信接口)单元,主要功能是将来自外围设备的数据进行串并转换之后传入内部总线,以及将数据进行并串转换之后输出到外部设备。UART的主要功能是和外部芯片的UART进行对接,从而实现两芯片间的通信。
海思提供的SDK中的内核默认开启了uart0和uart1,uart0默认用于调试使用,对应于设备单板中的/dev/ttyAMA0。Uart1可用作通信接口与外设进行数据接收和发送,对应于单板中的/dev/ttyAMA1。然而要想使用uart2来作为串行通信口,还需要修改内核,修改说明如下:
1、修改内核arch/arm/mach-hi3518/core.c,将对应位置修改为如下内容。
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 = {
#if(CONFIG_HISILICON_KCONSOLE==1)
& HIL_AMBADEV_NAME(uart1),
& HIL_AMBADEV_NAME(uart0),
& HIL_AMBADEV_NAME(uart2),
#elif (CONFIG_HISILICON_KCONSOLE==2)
& HIL_AMBADEV_NAME(uart2),
& HIL_AMBADEV_NAME(uart0),
& HIL_AMBADEV_NAME(uart1),
#else
& HIL_AMBADEV_NAME(uart0),
& HIL_AMBADEV_NAME(uart1),
& HIL_AMBADEV_NAME(uart2),
#endif
}
2、lookups结构体中增加:
static struct clk_lookup lookups[] = {
{ /* UART2 */ //add
.dev_id = "uart:2",
.clk = &uart_clk,
},
}
3、修改 arm/mach-hi3518/include/mach/irqs.h中相关宏为以下内容:
#define UART0_IRQ {HI3518_IRQ_START + 5, NO_IRQ }
#define UART1_IRQ { HI3518_IRQ_START +5, NO_IRQ }
#define UART2_IRQ { HI3518_IRQ_START + 25,NO_IRQ }
4、应用代码中需要设置一下 UART_RXD(GPIO7_6)、UART2_TXD(GPIO7_7)GPIO复用功能
himm 0x200F0108 0x1 //UART2_RXD
himm 0x200F010C 0x1 //UART2_TXD
5、单板的/etc/init.d/S00devs文件中,添加以下内容:
mknod /dev/ttyAMA2 c 204 66
补充:
按照以上设置之后,在应用程序中,只需要根据实际需要,打开uart2在单板上字符设备结点,设置波特率,然后select监听对应文件描述符,read接收其它芯片发出的数据即可。
疑惑:
海思SDK中提供的用户指南上有“通用异步收发器”相关的驱动配置流程说明,但是根据文档上的流程实现了驱动,发现依旧不能使用UART2功能,而且与UART2相关的寄存器设置根本不生效,后面才采用修改内核的方法来解决问题。路过的朋友,有知道这个原因的,烦请不吝赐教,给我留言,谢谢!
- 海思HI3518内核中开启UART2的方法
- 海思HI3518内核中开启UART2的方法
- 海思Hi3518内核编译过程中问题点记录
- hi3536使用single模式,在主CPU上启用uart2和uart3的内核修改方法!
- Hi3520D UART2和UART3是如何加载到内核的
- Hi3520D UART2和UART3是如何加载到内核的
- 新路程------hi3516a开启uart2
- 海思hi3518的audio音频调试
- 3518e 开启第三个串口uart2
- linux2.6.32.2内核把mini2440的UART2改为普通的串口驱动
- linux2.6.32.2内核把mini2440的UART2改为普通的串口驱动
- HI3520D在内核中复用UART2,UART3管脚
- HI3520D在内核中复用UART2,UART3管脚
- 自己动手写的UART2驱动
- java 中开启文件的小方法
- apache中开启gzip的方法
- 开启ZIGBEE中双串口的方法
- Android中开启进程的方法
- SylixOS信号系统(1)
- 排列组合算法笔记
- gcc中函数或者变量的weak属性
- 60. Event onfocus 事件
- hdoj 4324 Triangle LOVE 【拓扑排序判断是否存在可行解】
- 海思HI3518内核中开启UART2的方法
- Android FragmentManage FragmentTransaction介绍(二)
- 1<<n 和 n<<1
- Combination Sum
- c++里面创建对象,什么时候应该用new什么时候应该直接创建?
- ijkplayer阅读笔记01-初始化操作
- LA3987 Ladies’ Choice 婚姻稳定算法
- 两个栈实现一个队列
- Nim HDU2975