4、CC2541芯片中级教程-OSAL操作系统(简单AT指令实现+IIC软件和硬件实现驱动MPU6050)...

 

 

本文根据一周CC2541笔记汇总得来——

适合概览和知识快速索引——

全部链接:

中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探

【插入】SourceInsight-工程建立方法

中级教程-OSAL操作系统(OSAL系统解基本套路)

中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~

中级教程-OSAL操作系统(ADC-光敏电阻)

OSAL操作系统-实验16 串口波特率扩展

OSAL操作系统-实验17 AT命令初步

OSAL操作系统-实验20 模拟IIC通信+硬件IIC(Mpu6050)

OSAL 操作系统-实验 23 PWM 输出(改变占空比)

OSAL 操作系统-实验 24 看门狗 WachDog

OSAL操作系统-实验25 SNV内部Flash数据读写

OSAL 操作系统-实验 29 系统睡眠等级研究

OSAL 操作系统-实验 31 从机广播功率修改

 

 

一、AT命令初步(17)

AT 命令式通过串口来通信的

串口一有数据就会调用回调函数,为了防止回调函数被频繁调用,采用(延时+数据长度控制,即:超出某一时间或者超出某一长度就调用 NPI_ReadTransport(buffer,numBytes); 读取一定数据)

 

第224行将串口收到的数据调用AT指令处理函数进行处理: 

 1 // AT 命令处理 函数
 2 bool simpleBLE_AT_CMD_Handle(uint8 * pBuffer, uint16 length)
 3 {
 4     bool ret = TRUE;
 5     char strTemp[64];
 6 
 7     // 1、测试
 8     if((length == 4) && str_cmp(pBuffer, "AT\r\n", 4))//AT
 9     {
10         sprintf(strTemp, "OK\r\n");
11         NPI_WriteTransport((uint8 * )strTemp, osal_strlen(strTemp));
12     }
13     // 2、设置LED1的亮灭
14     else if((length == 9) && str_cmp(pBuffer, "AT+LED", 6))
15     {
16         /*
17         Para: 0 ~ 1
18         AT+LED0\r\n: 关灯
19         AT+LED1\r\n: 开灯
20         Default: 0
21         */
22         switch(pBuffer[6])
23         {
24         case '?':
25             sprintf(strTemp, "OK+Get:%d\r\n", g_LED1);
26             NPI_WriteTransport((uint8 * )strTemp, osal_strlen(strTemp));
27             break;
28         case '0':
29             g_LED1 = 0;
30             HalLedSet(HAL_LED_1, HAL_LED_MODE_OFF);      // 关闭led1
31             sprintf(strTemp, "OK+Set0\r\n");
32             NPI_WriteTransport((uint8 * )strTemp, osal_strlen(strTemp));
33             break;
34         case '1':
35             g_LED1 = 1;
36             HalLedSet(HAL_LED_1, HAL_LED_MODE_ON);      // 点亮led1
37             sprintf(strTemp, "OK+Set1\r\n");
38             NPI_WriteTransport((uint8 * )strTemp, osal_strlen(strTemp));
39             break;
40         default:
41             ret = FALSE;
42             break;
43         }
44     }
45     else
46     {
47         sprintf(strTemp, "ERROR\r\n");
48         NPI_WriteTransport((uint8 * )strTemp, osal_strlen(strTemp));
49 
50         ret = FALSE;
51     }
52 
53     return ret;
54 }

258 行, AT\r\n 为测试命令,

  业界几乎所有的 AT 命令模块第一条 AT 命令都是这一条,用于测试模块连接是否正常。

 
264~288 行,我们编写了一个用于点灯的 AT 命令:
  AT+LED?\r\n: 查询灯的开关状态
  AT+LED0\r\n: 关灯
  AT+LED1\r\n: 开灯
 
总结:整体比较简单就是将串口数据创送给AT指令处理函数处理,串口数据接收采用一定技巧
 
 
二、模拟IIC通信+硬件IIC(Mpu6050) 20

Cc2541 有硬件 iic 功能,但 cc2540 并没有硬件 iic 功能

 
Description:    This file contains code that is common to all sensor drivers.
在 Hal_sensor.c  ti 已经实现了 cc2541 得硬件 iic 驱动,我们使用就行。
 
simpleBLETest.c中,编写的对 mpu6050 的访问函数。
 
 
 
以上两个函数,实现的是对 mpu6050 的寄存器的读写操作
 
 
 
以上两个文件,实现的是 gpio 模拟 iic 的时序,并封装模拟 iic 的读写函数。
 
在Iic.h中我们定义了 P1.5 与 P1.6 作为 iic的SCL与SDA:
 
 
总结:IIC和MPU6050都封装的很好。协议栈是个好东西,方便移植!!!是个宝库!
 
上面是 IIC的模拟实现,其 硬件实现使用起来更简单:

在simpleBLETest.c直接将MPU6050的设备地址传送给I2C初始化函数就可以了,然后就直接调用读写函数进行读写!

 

 

未完~关注我的cc2541分类 

在基于TI芯片的Zigbee平台上,使用TI-OSAL操作系统实现任务调度事件处理,需要深入了解TI-OSAL的工作机制API。首先,你应当熟悉任务创建管理的流程,以及如何通过事件驱动任务的执行。具体步骤包括: 参考资源链接:[TI Zigbee OSAL 操作系统分析与移植指南](https://wenku.csdn.net/doc/41gmsv9iij?spm=1055.2569.3001.10343) 1. 初始化TI-OSAL环境,调用osalInit函数进行系统初始化。 2. 使用osalTaskInit函数注册初始化任务,每个任务都关联一个任务控制块TCB,其中包含任务的名称、优先级一个任务函数。 3. 在任务函数内部,使用osal_set_event函数来注册或取消注册事件,使得任务能够响应不同的事件。 4. 在主循环中,通过osal_start_system函数启动系统,该函数会根据优先级事件调度各个任务的执行。 5. 事件处理函数osal_run_event_loop负责循环检测事件队列,并根据事件类型调用相应的事件处理函数。 6. 对于消息的传递,可以通过osal_msg收到消息后,根据消息内容调用相应处理函数。 7. 对于中断服务,TI-OSAL提供osal_set_int_levelosal_intrea恢复中断服务的函数来管理中断级别。 8. 内存管理方面,TI-OSAL通常提供osalmallocosalfree等函数来分配释放内存资源。 实际案例中,开发者可以根据具体的硬件应用需求,创建特定的任务来处理如传感器数据读取、无线通信用户界面交互等。例如,当一个传感器数据任务检测到特定事件时,它将设置相应的事件标志,并在任务函数中检测到此事件后执行数据处理逻辑。 为了更好地理解应用TI-OSAL操作系统,推荐参考《TI Zigbee OSAL 操作系统分析与移植指南》。该指南不仅提供了对TI-OSAL操作系统深入的分析,还包含了许多实践中的应用案例心得,能够帮助开发者在实际工作中有效地运用TI-OSAL进行任务调度事件处理。 参考资源链接:[TI Zigbee OSAL 操作系统分析与移植指南](https://wenku.csdn.net/doc/41gmsv9iij?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值