ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ARM学习笔记(12)

ARM学习笔记(12) PWM与电容触控屏裸机驱动要点PWM部分计数器时钟配置为1MHz时每个计数步长对应1微秒。输出1KHz的PWM信号周期就是1ms对应周期寄存器的数值设为1000即可。PWM的周期由周期寄存器配置占空比由采样比较寄存器控制占空比的变化逻辑和引脚极性直接相关- 引脚默认高电平采样寄存器值越大占空比越大- 引脚默认低电平采样寄存器值越大占空比越小// PWM初始化1MHz计数时钟1KHz周期50%占空比void pwm_init(void){// 配置引脚复用为PWM功能pwm_gpio_config();// 设置周期寄存器1ms 1000 * 1usPWM-PERIOD 1000;// 设置比较寄存器50%占空比PWM-CMP 500;// 配置引脚极性、启动计数器PWM-CR (1 0) | (0 1);}电容触控屏部分电容触控屏通过感应电压变化识别触摸操作和电阻屏的工作原理不同电阻屏需要做校准。常用的触控芯片有两款都是4.3寸屏用的- GT1158I2C设备地址 0x14- GT9147I2C设备地址 0x5D支持最多5点多点触控芯片内部寄存器可以直接读取设备ID、触摸点数、每个点的XY坐标等信息坐标数据存放在0x8158 ~ 0x815B地址区间。驱动流程1. 配置RST和INT引脚的复用功能与电气属性2. 拉取RST引脚完成触控芯片硬件复位3. 初始化I2C2外设作为和芯片通信的总线4. 配置GIC中断控制器注册gt9147中断处理函数设置中断优先级使能对应中断通道5. 配置INT引脚的中断触发方式下降沿触发配置值为016. 读取芯片ID寄存器地址0x8140确认I2C通信正常7. 中断服务函数中先判断当前按下的点数再依次读取每个点的坐标// GT9147 读指定寄存器unsigned char gt9147_read(unsigned short reg){unsigned char data;i2c_start();i2c_write_byte(0x5D 1);i2c_write_byte(reg 8);i2c_write_byte(reg 0xff);i2c_repeat_start();i2c_write_byte((0x5D 1) | 1);data i2c_read_byte(0);i2c_stop();return data;}// 触控中断处理函数void gt9147_irq_handler(void){unsigned char point_num;// 读取当前触摸点数point_num gt9147_read(0x814F) 0x0F;// 根据点数依次读取X、Y坐标// ...}
返回列表