1 设备树文件

1.1 引脚配置

硬件上采用了 CSI0_DAT10、CSI0_DAT11 做为串口 1 的 TX,RX,在设备树文件中,需要按照如下配置:

     pinctrl_uart1: uart1grp {fsl,pins = <MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA   0x1b0b1MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1>;};#define MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA        0x280 0x650 0x000 0x3 0x0
#define MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA        0x284 0x654 0x920 0x3 0x1

参数 描述
mux_reg PAD MUX Register offset
conf_reg PAD Control Register offset
input_reg select input register offset
mux_mode value of PAD MUX Register
input_val value of select input Register
config value of PAD Control Register
1.1.1 mux_reg:PAD MUX Register offset

mux_mode = 0x03
select signal UART1_TX_DATA

1.1.2 conf_reg:PAD Control Register offset

config = 0x1b0b1

1.2 串口资源描述
             uart1: serial@02020000 {compatible = "fsl,imx6q-uart", "fsl,imx21-uart";reg = <0x02020000 0x4000>;interrupts = <0 26 IRQ_TYPE_LEVEL_HIGH>;clocks = <&clks IMX6QDL_CLK_UART_IPG>,<&clks IMX6QDL_CLK_UART_SERIAL>;clock-names = "ipg", "per";dmas = <&sdma 25 4 0>, <&sdma 26 4 0>;dma-names = "rx", "tx";status = "okay";};
  • 这个一般只需要改动 status 的值。okay,disabled。
  • reg = <0x02020000 0x4000>,表示 uart1 寄存器的起始地址与大小
  • interrupts = <0 26 IRQ_TYPE_LEVEL_HIGH>,中断号 26,高电平有效
  • clocks = <&clks IMX6QDL_CLK_UART_IPG>, <&clks IMX6QDL_CLK_UART_SERIAL>; 未搞懂
  • dmas = <&sdma 25 4 0>, <&sdma 26 4 0>; 未搞懂

2 系统调用 open、write、read 是如何操作串口

在 Linux 系统中,每个字符设备都由一个 struct cdev 结构表示:

struct cdev {struct kobject kobj;struct module *owner;const struct file_operations *ops;struct list_head list;dev_t dev;unsigned int count;
};

其中,包含了文件操作的接口 struct file_operation *ops,编写串口驱动就是用串口的操作函数填充这些接口。如下图所示:

2.1 open 操作

open 函数经过层层调用,最后调用了 imx_startup 函数。

static int imx_startup(struct uart_port *port)
{/*使能时钟;设置发送/接收 FIFO 触发字节数;设置DMA;注册DMA发送函数;使能中断;*/
}
2.2 write 操作

write 函数经过层层调用,最后调用了 imx_start_tx 函数。

static void imx_start_tx(struct uart_port *port)
{/*根据是否开启DMA,开启相应的发送中断;*/
}

开启中断后,注册过的中断发送函数会自动将发送 buff 内的字节发送出去。

2.3 read 操作

接收中断会自动将接收到的字节搬运至接收缓冲区,所以串口不需要实现特定的 read 函数,调用 read 函数,最后会调用 tty_read 函数,将接收缓冲区的内容搬运至用户空间。

2.4 close 操作

close 函数经过层层调用,最后调用了 imx_shutdown 函数。

static void imx_shutdown(struct uart_port *port)
{/*等待DMA结束;停止定时器;失能所有中断;*/
}

IMX6DL 串口篇相关推荐

  1. FPGA学习之串口篇

    FPGA学习之串口篇 文章目录 FPGA学习之串口篇 前言 二.UART发送代码 三.UART接收代码 三. 总结 前言   UART(Universal Asynchronous Receiver/ ...

  2. Android 对接硬件串口篇

    简介:硬件设备有IC卡片,指压测试仪(测试脉搏信号.心率.血压),经过串口获取硬件设备发送的数据. 正文:第一步:获得硬件设备,应用市场下载串口调适软件,测试一下在Android环境下数据是否能正常获 ...

  3. .Net Core跨平台应用研究-HelloArm(串口篇)

    引言 为了验证采用dotnet core技术开发的物联网设备数据采集接入服务应用是否能在高性价比的linux嵌入式平台运行,针对dotnet core应用程序进行嵌入式linux环境的发布部署运行验证 ...

  4. android 硬件对接,Android 对接硬件串口篇

    private DispQueueThread DispQueue; private AssistBean AssistData; private SerialControl ComA; @Overr ...

  5. 第三篇 香橙派的外设开发基础(中)— 串口篇

    目录 一.OrangePi PC Plus的串口 1.开启OrangePi PC+用于通信的串口

  6. 串口服务器之虚拟串口篇

    可将TCP/IP连接.Modbus Tcp映射成本地虚拟串口,本地应用(InTouch.WinCC.组态王等)通过访问虚拟串口就可以完成远程监控及数据传输功能.VX:18106118736 QQ:80 ...

  7. Windows操作系统:串口篇

    windows下串口编程还是linux有区别的,将最近调试的demo和查到的相关资料做了总结 1.打开串口 打开串口使用CreateFile()函数.以打开COM1为例: HANDLE hComm;h ...

  8. linux 串口波特率的修改与sdma的设置

    最近这几天准备用串口实现DMA的传输数据,刚开始研究三天DMA,结果是一脸懵逼,无奈之下,只能跑去研究串口,结果发现Linux系统串口和DMA是真的难(小白,而且没人一起研究!),芯片手册对应的页数可 ...

  9. 单片机通信总述——理论部分(CAN、串口、SPI、I2C等)

    一.基础概念 1.1 通信方法 并行通信:传输原理:数据各个位同时传输:优点:速度快: 缺点:占用引脚资源多.是指使用 8.16.32 及 64 根或更多的数据线(有多少信号为就需要多少信号位)进行传 ...

  10. 基于STM32F103入门4——串口通信

    STM32F103串口篇 串口的基本概念 串行和并行 串行 并行 通信方式 全双工 半双工 单工 波特率 波特率计算 串口的配置 代码编写步骤 串口的重定向 串口的例程 main.c usart.c ...

最新文章

  1. 人工智能--野人过河
  2. [解决方案]sql server复制需要有实际的服务器名称才能连接到服务器
  3. Ext.DomHelper类的使用示例(内容操作)
  4. 仅输入单张图片,就能“看”出物体材质!这篇图形学论文已被SIGGRAPH 2021收录...
  5. pcb二次钻孔_作为一名合格的PCB设计工程师,了解生产制造很重要
  6. [转载] su和sudo
  7. 四大障碍将阻止或减缓广电发展宽带业务
  8. Vs2015常见错误码:error LNK2019: 无法解析的外部符号;error C2011:类型重定义;
  9. 如何免费制作表白二维码?
  10. 导向滤波-Guided Image Filtering
  11. Need和Want有何不同?
  12. 商品订单管理系统(参考答案)
  13. 常见十大漏洞总结(原理、危害、防御)
  14. 进销存ERP系统、销售单、采购单、退货单、库存管理、库存盘点、调拨、借入、借出、出库、入库、归还单、收款单、付款单、资金流水、销售报表、采购报表、库存报表、财务报表、商品库、电商erp、连锁erp
  15. Zookeeper 集群模式搭建
  16. 在绝望中寻找希望,把自己逼上成功
  17. 通过MATLAB模拟24个GPS卫星的轨道运行效果
  18. 一个简单的扑克牌小游戏
  19. 【关于回归结果F值缺失的处理方式】
  20. QEMU TCG Plugins详解

热门文章

  1. 编译实验 . 递归下降分析器
  2. 无线通信基础知识14:数字通信之调制
  3. kindeditor上传图片php,kindeditor上传图片与上传文件js
  4. 在vue中使用echarts之世界各地到中国某些城市的航线
  5. 在计算机上配置超级终端,电脑中如何添加超级终端?添加超级终端的方法
  6. 理解AutoResetEvent与ManualResetEvent的区别
  7. C#——SqlParameter的使用方法及注意事项
  8. oracle多表查询员工和上级,oracle多表查询之经典面试题
  9. vb.net 教程 3-10 窗体编程 datagridview控件 7 修改单元格
  10. Android 分区布局详解