OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6494|回复: 6

最近有个项目要把cortex-M3移植到M0上

[复制链接]

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-8-17 19:25:01 | 显示全部楼层 |阅读模式
5金钱
最近有个项目要把cortex-M3移植到M0上。
遇到下面问题,请亲们给看看怎么解决。

M3上的一个函数:
[mw_shl_code=c,true]static void stm32_intr_init(void) { NVIC_InitTypeDef nvic_init; EXTI_InitTypeDef exti_init; extern void *__Vectors; /* * Make sure vector table offset is set correctly before enabling * interrupts. */ SCB->VTOR = (u32)&__Vectors; /* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); /* 4 bits priority */ #ifndef DEMO_UART spi_platform_intr_init(); #endif /* * Set button to cause external interrupt on either edge. */ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); exti_init.EXTI_Line = BUTTON_EXT_LINE; exti_init.EXTI_Mode = EXTI_Mode_Interrupt; exti_init.EXTI_Trigger = EXTI_Trigger_Rising_Falling; exti_init.EXTI_LineCmd = ENABLE; EXTI_Init(&exti_init); nvic_init.NVIC_IRQChannel = BUTTON_IRQ; nvic_init.NVIC_IRQChannelPreemptionPriority = 15; nvic_init.NVIC_IRQChannelSubPriority = 0; nvic_init.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvic_init); }[/mw_shl_code]
把这个函数移植到M0后,有三处处提示有错误。
[mw_shl_code=c,true]static void stm32_intr_init(void) { NVIC_InitTypeDef nvic_init; EXTI_InitTypeDef exti_init; extern void *__Vectors; /* * Make sure vector table offset is set correctly before enabling * interrupts. */ /* SCB->VTOR = (u32)&__Vectors; M0的结构体中没有VTCR这个成员*/ /* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); M0的库文件中也没有这个函数*/ #ifndef DEMO_UART spi_platform_intr_init(); #endif /* * Set button to cause external interrupt on either edge. */ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); exti_init.EXTI_Line = BUTTON_EXT_LINE; exti_init.EXTI_Mode = EXTI_Mode_Interrupt; exti_init.EXTI_Trigger = EXTI_Trigger_Rising_Falling; exti_init.EXTI_LineCmd = ENABLE; EXTI_Init(&exti_init); nvic_init.NVIC_IRQChannel = BUTTON_IRQ; nvic_init.NVIC_IRQChannelPriority = 2; /*nvic_init.NVIC_IRQChannelSubPriority = 0; M0上也没有这个成员*/ nvic_init.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvic_init); }[/mw_shl_code]
1、SCB->VTOR = (u32)&__Vectors;    M0的结构体中没有VTCR这个成员
2、NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); M0的库文件中也没有这个函数
3、nvic_init.NVIC_IRQChannelSubPriority = 0; M0上也没有这个成员。

各位高手们,有把M3的工程移植到M0上的经历的吗。
我这个问题怎么解决呀。

最佳答案

查看完整内容[请看2#楼]

M0的NVIC和M3的不同 M3的优先级寄存器用了四位bit.可以有四组不同的优先级组合,可以达到16个不同的响应和抢占优先级等级. 但是M0的只用了2位bit,也就是说,他没有优先级分组,只有0,1,2,3四个抢占优先级模式. ------------- 因此中断分组就不需要了 删除NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); 因此中断优先级就没有响应优先级和抢占优先级的说法,只有优先级这个说法 nvic_init.NVIC_IRQChannelSubPriori ...
原子哥是不是又要出黑科技了呀。^_^...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2015-1-17
在线时间
16 小时
发表于 2015-8-17 19:25:02 | 显示全部楼层
M0的NVIC和M3的不同
M3的优先级寄存器用了四位bit.可以有四组不同的优先级组合,可以达到16个不同的响应和抢占优先级等级.

但是M0的只用了2位bit,也就是说,他没有优先级分组,只有0,1,2,3四个抢占优先级模式.
-------------
因此中断分组就不需要了
删除NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);

因此中断优先级就没有响应优先级和抢占优先级的说法,只有优先级这个说法
nvic_init.NVIC_IRQChannelSubPriority = 0改成NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
SCB->VTOR = (u32)&__Vectors;这个不清楚
---------------
此外,最最最重要的是!!!!
M0和M3的库函数是不一样的
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
 楼主| 发表于 2015-8-17 20:38:16 | 显示全部楼层
CM0上没有这个VTOR
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-17 22:17:06 | 显示全部楼层
没用过M0,你可以参考下M0官方的demo例程。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
 楼主| 发表于 2015-8-18 11:49:18 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
发现用M0的人很少。还是谢谢原子哥了。
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
 楼主| 发表于 2015-8-21 11:53:16 | 显示全部楼层
回复【5楼】叶萌球:
---------------------------------
谢谢你的回答。库函数我已经换成f0xx的了应该不是库函数的问题。
其他的我都会修改就是SCB这句改不了。
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
发表于 2016-1-18 21:14:38 | 显示全部楼层
二楼明见!根本原因是M0和M3不同,直接原因是库函数不同、、、最近在搞F051芯片
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 15:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表