版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、培训内容MQX RTOS I/O 驱动MQX如何管理I/O驱动I/O驱动相关的文件目录结构使用MQX提供的I/O驱动创建一个新的驱动如何从定义调试串口MQX 中断MQX如何处理中断MQX BSP 移植什么情况下需要一个新的BSP与电路板相关的目录BSP移植中的重要文件BSP移植的关键步骤使用脚本文件加速BSP移植演示Demo1: 使用MQX自带的驱动Demo2: 创建一个新的驱动并且进行测试第1页,共39页。MQX如何管理I/O驱动软件采用分层设计屏蔽驱动细节易用的API第2页,共39页。I/O 子系统 APIPOSIX 标准 I/O 接口What does the I/O subsystem
2、 API look like?第3页,共39页。I/O驱动相关的文件目录结构这里,我们关心右边红色方框内的目录:config有user_config.h文件 以及编译BSP, PSP, MFS, RTCS, SHELL, USB的工程文件lib输出文件.lib and .hmqxbsp, 包含BSP驱动代码 (重要目录,我们需要根据新的目标板对此进行修改)bat, 包含.bat文件,在编译后把 .lib和.h文件拷贝到输出目录 其他文件夹,比如 mfs, rtcs,shell,usb 是对应协议栈的内容第4页,共39页。MQX 驱动MQX 提供了片上模块的驱动:TTYI2CSPIGPIOADC
3、RTCFlashSD cardand much more!第5页,共39页。如何使用MQX的I/O驱动在user_config.h 使能对应的模块#define BSPCFG_ENABLE_I2C0 1#define BSPCFG_ENABLE_II2C0 0#define BSPCFG_ENABLE_I2C1 0#define BSPCFG_ENABLE_II2C1 0#define BSPCFG_ENABLE_SPI0 0#define BSPCFG_ENABLE_ISPI0 0重编译 MQX 库fopenfreadfwriteioctlfclose第6页,共39页。使用MQX的I/O驱动
4、第7页,共39页。使用MQX的I/O驱动要点: 学习如何使用MQX的I2C驱动来访问板上的MMA8451 I2C接口加速度传感器步骤步骤 1: 使能 I2C0 驱动在 configtwrk60n512user_config.h 文件里#define BSPCFG_ENABLE_I2C0 1步骤2: 重新编译BSP第8页,共39页。使用MQX的I/O驱动步骤3: 在应用中使用API访问 MMA8451void init_i2c(void) f_i2c = fopen (i2c0:, NULL); if (f_i2c = NULL) printf (Failed to open the I2C d
5、river!n); _mqx_exit (1L); ioctl (f_i2c, IO_IOCTL_I2C_SET_MASTER_MODE, NULL);第9页,共39页。使用MQX的I/O驱动步骤4: 使用API访问MMA8451u8 mma8451_read_reg(u8 addr) uint_32 param; u8 mem1; / set dest address for this access param = I2C_ADDR_MMA8451; ioctl (f_i2c, IO_IOCTL_I2C_SET_DESTINATION_ADDRESS, ¶m); / 1.start,
6、 send dst address fwrite(mem, 1, 0, f_i2c); ioctl (f_i2c, IO_IOCTL_FLUSH_OUTPUT, ¶m); / 2.send reg address mem0 = addr; fwrite(mem, 1, 1, f_i2c); fflush(f_i2c); / 3.repeat and device address ioctl(f_i2c, IO_IOCTL_I2C_REPEATED_START, NULL); param = 1; ioctl(f_i2c, IO_IOCTL_I2C_SET_RX_REQUEST, &pa
7、ram); / 4.read fread (mem, 1, 1, f_i2c); / 5.stop ioctl (f_i2c, IO_IOCTL_I2C_STOP, NULL); return mem0;第10页,共39页。使用MQX的I/O驱动步骤5: 读取MMA8451数据void hw_mma8451_get_data(s16 *x, s16 *y, s16 *z) u8 v; v = mma8451_read_reg(0); if(v&1) *x = (s16)(mma8451_read_reg(0 x01)4; if(v&2) *y = (s16)(mma8451_read_reg(
8、0 x03)4; if(v&4) *z = (s16)(mma8451_read_reg(0 x05)4;第11页,共39页。使用MQX的I/O驱动优点: 不用关心MCU的寄存器内容,以及其它细节,使开发更加方便!参考资料:Freescale MQX TM I/O Drivers Users Guide第12页,共39页。创建新的驱动第13页,共39页。创建新的驱动启动流程:main()_mqx()_bsp_enable_card() / we need to modify the code in this functionscheduleruser task第14页,共39页。创建新的驱动开
9、发风格和linux是类似的步骤1: 准备以下5个函数_mqx_int _io_mma8451_open (MQX_FILE_PTR, char_ptr, char_ptr);_mqx_int _io_mma8451_close(MQX_FILE_PTR);_mqx_int _io_mma8451_read (MQX_FILE_PTR, char_ptr, _mqx_int);_mqx_int _io_mma8451_write(MQX_FILE_PTR, char_ptr, _mqx_int);_mqx_int _io_mma8451_ioctl(MQX_FILE_PTR, _mqx_uint
10、, pointer);第15页,共39页。创建新的驱动步骤1: 准备以下5个函数(续)_mqx_int _io_mma8451_open () fd = fopen (i2c0:, NULL); if (fd = NULL) return MQX_INVALID_POINTER; ioctl (fd, IO_IOCTL_I2C_SET_MASTER_MODE, NULL); init_mma8451(); return MQX_OK;第16页,共39页。创建新的驱动步骤1: 准备以下5个函数(续)_mqx_int _io_mma_close() fclose(fd); return MQX_O
11、K;第17页,共39页。创建新的驱动步骤2: 实现install函数_mqx_uint _io_mma8451_install(char_ptr identifier) return _io_dev_install(identifier, _io_mma8451_open, _io_mma8451_close, _io_mma8451_read, _io_mma8451_write, _io_mma8451_ioctl, NULL); _io_dev_install() will register the driver in I/O subsystem.第18页,共39页。创建新的驱动步骤3:
12、 在user_config.h中添加#define BSPCFG_ENABLE_MMA 0步骤: 在 init_bsp.c的_bsp_enable_card()函数中添加#if BSPCFG_ENABLE_MMA8451 _io_mma8451_install(mma8451:);#endif步骤: 编译BSP工程第19页,共39页。测试新驱动void mma8451_test_new(void) fd = fopen (mma8451:, NULL); if (fd = NULL) printf (Failed to open mma8451!n); _mqx_exit (1L); whil
13、e (TRUE) fread (acc, 1, 6, fd); printf(x,y,z: %d,%d,%d n, acc0,acc1,acc2); _time_delay(300); 第20页,共39页。驱动开发注意事项需要考虑这一份驱动可能有多个运行实例每个实例都需要有独立的变量保存自己的信息,而这些信息应存储在在fopen时通过malloc分配的针对本实例的存储区域此时不推荐使用全局变量第21页,共39页。如何重定义打印串口在user_config.h中#define BSP_DEFAULT_IO_CHANNEL ttyd:#define BSP_DEFAULT_IO_CHANNEL_D
14、EFINED#define BSPCFG_SCI3_BAUD_RATE 115200“ttyd”的管脚分配在哪里定义?In mqxsourcebsptwrk60n512init_gpio.c, _bsp_serial_io_init(): switch (dev_num) case 0: pctl = (PORT_MemMapPtr)PORTD_BASE_PTR; if (flags & IO_PERIPHERAL_PIN_MUX_ENABLE) /* PTD6 as RX function (Alt.3) + drive strength */ pctl-PCR6 = 0 | PORT_PC
15、R_MUX(3) | PORT_PCR_DSE_MASK; 第22页,共39页。MQX 中断第23页,共39页。MQX 中断中断里的常见操作:Post a semaphoreSend a messageSet an event注意:中断不是任务记住:中断尽量短,并且不能调用阻塞函数第24页,共39页。MQX 中断MQX 内核中断管理应用层中断回调函数MQX内核中断需要做:当前任务的上下文保存切换到中断任务stack调用用户ISR恢复下一个待执行任务的上下文使用 _int_install_isr() 安装中断回调函数第25页,共39页。内核中断有一些应用需要对时延有较高要求,需要直接安装用户中断
16、到向量表这样,内核中断服务程序就会被替代实现: _int_install_kernel_isr()用户需要考虑:保持上下文不能调用任何MQX API第26页,共39页。MQX 板级支持包 (BSP)第27页,共39页。板级支持包板级支持包提供针对指定硬件平台的驱动,实现了对底层硬件的隔离第28页,共39页。什么时候需要创建新的BSP硬件发生改变同一硬件平台,但是需要做不同的配置第29页,共39页。BSP 移植时的重要文件mqxsourcebsptwrk60n512 init_bsp.c IO drivers 初始化uint_32 _bsp_enable_card(void)#if BSPCFG
17、_ENABLE_MMA _io_mma_install(mma:);#endif第30页,共39页。BSP 移植时的重要文件(续)mqxsourcebsptwrk60n512 init_hw.c FlexBus 初始化static void _bsp_flexbus_setup (void) pctl-PCR10 = PORT_PCR_MUX(ALT5); /* FB_AD19 */ pctl-PCR11 = PORT_PCR_MUX(ALT5); /* FB_AD18 */ pctl-PCR16 = PORT_PCR_MUX(ALT5); /* FB_AD17 */ pctl-PCR17 =
18、 PORT_PCR_MUX(ALT5); /* FB_AD16 */ pctl-PCR18 = PORT_PCR_MUX(ALT5); /* FB_AD15 */ pctl-PCR19 = PORT_PCR_MUX(ALT5); /* FB_OE_b */ pctl-PCR20 = PORT_PCR_MUX(ALT5); /* FB_AD31 */ pctl-PCR21 = PORT_PCR_MUX(ALT5); /* FB_AD30 */ pctl-PCR22 = PORT_PCR_MUX(ALT5); /* FB_AD29 */ pctl-PCR23 = PORT_PCR_MUX(ALT5
19、); /* FB_AD28 */第31页,共39页。BSP 移植时的重要文件(续)mqxsourcebsptwrk60n512 init_gpio.c IO pin 初始化_mqx_int _bsp_i2c_io_init( uint_32 dev_num) switch (dev_num) case 0: pctl = (PORT_MemMapPtr)PORTD_BASE_PTR; pctl-PCR8 = PORT_PCR_MUX(ALT2) | PORT_PCR_ODE_MASK; pctl-PCR9 = PORT_PCR_MUX(ALT2) | PORT_PCR_ODE_MASK; br
20、eak; 第32页,共39页。BSP 移植时的重要文件(续)mqxsourcebsptwrk60n512Init_.cconst KI2C_INIT_STRUCT _bsp_i2c0_init = 0, /* I2C channel */ BSP_I2C0_MODE, /* I2C mode */ BSP_I2C0_ADDRESS, /* I2C address */ BSP_I2C0_BAUD_RATE, /* I2C baud rate */ BSP_I2C0_INT_LEVEL, /* I2C int level */ 0, /* I2C int sublevel not availab
21、le */ BSP_I2C0_TX_BUFFER_SIZE,/* I2C int tx buf */ BSP_I2C0_RX_BUFFER_SIZE /* I2C int rx buf */;第33页,共39页。BSP移植的关键步骤1. 选择最接近新的硬件觉得原始BSP2. 拷贝原始BSP,PSP工程文件,配置和源码3. 更改BSP相关的配置4. 根据新的目标板更改相关的代码5 .创建新的驱动参考资料:AN4287, MQX Board Support Package Porting Guide第34页,共39页。使用脚本文件加速BSP移植观察一下AN4287的内容,会发现有大量的以下操作:创建新文件夹拷贝文件夹以及其子文件夹内容到另一文件夹重命名文件夹和文件修改一些文件内的文本内容这些操作都是可以通过执行脚本程序来完成的 文本替换可以使用 GNU sed(stream editor) 工具实现第35页,共39页。GNU sed(stream editor)获取sed信息 /software/sed/, /Unix/Sed.html and /packages/sed.htm. Sed工具在文本替换方面功能很强大第36页,共39页。命令介绍Create a new BSPTo create
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年初中化学期末模拟预测试卷
- 2026中国医疗咨询服务行业市场现状竞争格局及投资机会规划研究报告
- 2026中国智能电动巡逻车行业市场现状供需分析及投资评估规划分析研究报告
- 2026中国新能源金融基础设施建设投融资模式专题报告
- 2026中国消费升级趋势下高端消费品市场研究报告
- 2026中国叶黄素酯跨境贸易壁垒分析及出口策略调整建议报告
- 2026新型纳米材料在冲击吸收护具中的应用突破研究报告
- 2026中国消费电子行业创新趋势分析及全球价值链重构战略研究报告
- 2026中国智能家居语音助手市场发展现状竞争分析投资潜力报告
- 成本实操-煤炭开采与洗选加工成本核算SOP
- 2025《煤矿安全规程》“一通三防”修订内容理解课件
- 委托审价合同范本
- T-CEMA 048-2025 体重管理门诊建设指南
- 2025年中级经济师考试中级保险专业真题及答案
- 服装厂生产流程标准化操作手册
- HSK3标准教材PDF课件
- 重点专科申报汇报
- 肿瘤内科医疗管理制度
- 八年级物理上册(人教版2024)-新教材解读培训课件
- 文化课堂合作协议书
- 中小学课堂教学电子产品使用与管理策略及实施方案
评论
0/150
提交评论