在智能门锁的设计种,M4核用来做指纹算法解码,其他的BLE,capsence,RFID,OLE等功能由M0核执行,M4核长期处于休眠状态,m0被唤醒后,根据需要去出发M4执行指纹解码。
1:如上的任务分配,需要了解到M4与m0对外设资源的分配,及两个核的通信机制。是否有相关文档描述?
2:官方历程中ROTS都是运行与M4核。在智能门锁应用中,需要用M0核运行ROTS,M4长期处于深度睡眠,需要时在运行指纹算法,这样才是最省功耗。
把官方例程的 M4 中RTOS 转移到M0中,需要注意哪些关键,是否有相关文档推荐?
3:附件是官方在M4核的代码,运行正常,我移植到M0核后,就停止在if(CapSense_NOT_BUSY == CapSense_IsBusy()),不能继续往下执行。请问原因是?
已解决! 转到解答。
1:如上的任务分配,需要了解到M4与m0对外设资源的分配,及两个核的通信机制。是否有相关文档描述?
- 尽量避免两个核同时访问同一外设,或者可以通过IPC进行双核之间的通信,协调之间的工作,具体可以参考相关示例代码 -
https://www.cypress.com/documentation/code-examples/ce223549-psoc-6-mcu-ipc-semaphore
https://www.cypress.com/documentation/code-examples/ce216795-psoc-6-mcu-dual-core-basics
2:官方历程中ROTS都是运行与M4核。在智能门锁应用中,需要用M0核运行ROTS,M4长期处于深度睡眠,需要时在运行指纹算法,这样才是最省功耗。
把官方例程的 M4 中RTOS 转移到M0中,需要注意哪些关键,是否有相关文档推荐?
- 应该是可以的。目前还没有具体的文档,可以先尝试移植到cm0+中,看是否出现问题。
3:附件是官方在M4核的代码,运行正常,我移植到M0核后,就停止在if(CapSense_NOT_BUSY == CapSense_IsBusy()),不能继续往下执行。请问原因是?
- 我试了下把CE222827 - PSoC 6 MCU: CapSense Tuner cm4的代码移植到cm0+中,代码运行是ok的,注意把相应的中断也要配置到cm0+。.
针对最后一个问题:
首先确认你使用的是 EZI2C 组件,不是标准的 I2C 组件,而且 EZI2C 组件的参数配置必须与CapSense 组件数据手册中 ‘Quick Start’ 章节中要求的配置相同()
Set Data Rate (kbps) to 400.
Set Number of Addresses to 1.
Set Primary Slave Address (7-bits) to 0x08.
Set Sub-Address Size (bits) to 16 bits.
其次,请将 for loop 中的 CapSense_ScanAllWidgets(); 函数作为 for loop 的最后一行代码执行。先执行此 API, 再调用 CapSense_IsWidgetActive() 是有问题的。
1:如上的任务分配,需要了解到M4与m0对外设资源的分配,及两个核的通信机制。是否有相关文档描述?
- 尽量避免两个核同时访问同一外设,或者可以通过IPC进行双核之间的通信,协调之间的工作,具体可以参考相关示例代码 -
https://www.cypress.com/documentation/code-examples/ce223549-psoc-6-mcu-ipc-semaphore
https://www.cypress.com/documentation/code-examples/ce216795-psoc-6-mcu-dual-core-basics
2:官方历程中ROTS都是运行与M4核。在智能门锁应用中,需要用M0核运行ROTS,M4长期处于深度睡眠,需要时在运行指纹算法,这样才是最省功耗。
把官方例程的 M4 中RTOS 转移到M0中,需要注意哪些关键,是否有相关文档推荐?
- 应该是可以的。目前还没有具体的文档,可以先尝试移植到cm0+中,看是否出现问题。
3:附件是官方在M4核的代码,运行正常,我移植到M0核后,就停止在if(CapSense_NOT_BUSY == CapSense_IsBusy()),不能继续往下执行。请问原因是?
- 我试了下把CE222827 - PSoC 6 MCU: CapSense Tuner cm4的代码移植到cm0+中,代码运行是ok的,注意把相应的中断也要配置到cm0+。.