本帖最后由 ljj3166 于 2015-3-19 23:24 编辑
LPCOpen库里面带有一对双核的example
试过用M0核去操作外设,一直编译不过
后来看了看readme
- What this example does: m0slave_blinky
- - Uses a special version of the startup code that bypasses SystemInit().
- - Does not link agains tthe board library (M4 does board init)
复制代码
原来m0采用了特殊的启动文件,没有进行初始化
没有链接到板级库,自然也就不能操作外设了
看样子,两个核都需要配置外设,才能使用起来
索性自己再建一个双核工程吧
如何建立工程:
http://www.lpcware.com/content/faq/lpcxpresso/lpc541xx-multicore-apps
非常清晰的过程,这里就不再累述了
这个官方指导链接也遗漏了一些细节,不过不影响
一直想在线debug双核,发现怎么也配置不对,那位大神科普一下
直接看看代码吧
M4侧:
- #include "board.h"
- #include <cr_section_macros.h>
- #include "boot_multicore_slave.h"
- unsigned char cnt_m4;
- int main(void) {
- SystemCoreClockUpdate();
- Board_Init();
- Board_UARTPutSTR("Core M4 boot......\r\n");
- SysTick_Config(SystemCoreClock/10); //M4的systick
- Board_LED_Set(0, false);
- boot_multicore_slave(); <font color="#ff0000">//boot slave核,这里没有配置入口地址,全默认</font>
- volatile static int i = 0 ;
- while(1) {
- i++ ;
- }
- return 0 ;
- }
- void SysTick_Handler(void)
- {
- cnt_m4++;
- if(cnt_m4>=20)
- {
- cnt_m4 = 0;
- Board_UARTPutSTR("Core M4 SysTick on......\r\n");
- }
- }
复制代码
M0侧:
- #include "board.h"
- #include <cr_section_macros.h>
- #include "boot_multicore_slave.h"
- unsigned char cnt_m0;
- int main(void) {
- SystemCoreClockUpdate();
- Board_Init();
- Board_LED_Set(0, true);
- SysTick_Config(SystemCoreClock/10);
- Board_UARTPutSTR("Core M0+ boot......\r\n");
- volatile static int i = 0 ;
- while(1) {
- i++ ;
- }
- return 0 ;
- }
- void SysTick_Handler(void)
- { cnt_m0++;
- if(cnt_m0>=5)
- {
- cnt_m0 = 0;
- Board_UARTPutSTR("Core M0+ Toggle LED0......\r\n");
- Board_LED_Toggle(0);
- }
- }
复制代码
上面的代码很简单
大概就是
由M0来点亮LED0(红色LED)每5个systick翻转一次并串口打印
M4纯粹打酱油,只在每20个systick在串口刷一下存在感
暂时还没有加入mailbox的动作,下次再整吧
前段时间粗略扫了一下user manual
记得mo和m4的systick可以共用的
不知为毛,在这对工程代码里面,m0也得初始化systick才能正常使用
记错了?
上个GIF