OpenEdv-开源电子网

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

TIM2进入不了中断

[复制链接]

4

主题

9

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2014-3-6
在线时间
0 小时
发表于 2014-7-9 09:53:54 | 显示全部楼层 |阅读模式
5金钱
最近在学习STM8L152C6 遇到问题
void TIME2_Init(U8 psc,U16 arr)
{
CLK_PCKENR1 = 1<<1;//使能TIM2时钟
TIM2_PSCR = psc;
TIM2_ARRH = (arr&0XFF00)>>8;
TIM2_ARRL = arr&0XFF;;

TIM2_CR1 = 1<<7;//开启预装载
TIM2_IER = 1<<0;//开启更新中断
TIM2_SR1 &= 0<<0;//清除中断标志位
TIM2_CR1 = 1<<0;//开启TIM2
}

@far @interrupt void TIM2_IRQHandler(void)
{
FLAG=1;
TIM2_SR1 &= 0<<0;//清除中断标志位
return;
}

在stm8_interrupt_vector.c里面定义
extern void _stext();     /* startup routine */
extern @far @interrupt void TIM2_IRQHandler(void);

struct interrupt_vector const _vectab[] = {
{0x82, (interrupt_handler_t)_stext}, /* reset */
{0x82, NonHandledInterrupt}, /* trap  */
{0x82, NonHandledInterrupt}, /* irq0  */
{0x82, NonHandledInterrupt}, /* irq1  */
{0x82, NonHandledInterrupt}, /* irq2  */
{0x82, NonHandledInterrupt}, /* irq3  */
{0x82, NonHandledInterrupt}, /* irq4  */
{0x82, NonHandledInterrupt}, /* irq5  */
{0x82, NonHandledInterrupt}, /* irq6  */
{0x82, NonHandledInterrupt}, /* irq7  */
{0x82, NonHandledInterrupt}, /* irq8  */
{0x82, NonHandledInterrupt}, /* irq9  */
{0x82, NonHandledInterrupt}, /* irq10 */
{0x82, NonHandledInterrupt}, /* irq11 */
{0x82, NonHandledInterrupt}, /* irq12 */
{0x82, NonHandledInterrupt}, /* irq13 */
{0x82, NonHandledInterrupt}, /* irq14 */
{0x82, NonHandledInterrupt}, /* irq15 */
{0x82, NonHandledInterrupt}, /* irq16 */
{0x82, NonHandledInterrupt}, /* irq17 */
{0x82, NonHandledInterrupt}, /* irq18 */
{0x82, NonHandledInterrupt}, /* irq19 */
{0x82, TIM2_IRQHandler}, /* irq20 */
{0x82, NonHandledInterrupt}, /* irq21 */
{0x82, NonHandledInterrupt}, /* irq22 */
{0x82, NonHandledInterrupt}, /* irq23 */
{0x82, NonHandledInterrupt}, /* irq24 */
{0x82, NonHandledInterrupt}, /* irq25 */
{0x82, NonHandledInterrupt}, /* irq26 */
{0x82, NonHandledInterrupt}, /* irq27 */
{0x82, NonHandledInterrupt}, /* irq28 */
{0x82, NonHandledInterrupt}, /* irq29 */
};

main()
{
TIME2_Init(7,1999);
_asm("rim"); //开启全局中断
while (1)
{}
}

为什么中断老进不去呀?


最佳答案

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

问题解决了,是因为中断函数放错位置了,应该放在irq19的位置
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

9

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2014-3-6
在线时间
0 小时
 楼主| 发表于 2014-7-9 09:53:55 | 显示全部楼层
问题解决了,是因为中断函数放错位置了,应该放在irq19的位置
回复

使用道具 举报

11

主题

81

帖子

0

精华

高级会员

Rank: 4

积分
651
金钱
651
注册时间
2012-8-1
在线时间
68 小时
发表于 2014-7-9 12:46:03 | 显示全部楼层
楼主:
void TIME2_Init(U8 psc,U16 arr)函数里的 “CLK_PCKENR1 = 1<<1;//使能TIM2时钟”,
等效于“CLK_PCKENR1 = 0x02;”
这是使能的Timer3的时钟啊~
使能TIM2时钟应该写成:“CLK_PCKENR1 = 1<<0;”吧


回复

使用道具 举报

4

主题

9

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2014-3-6
在线时间
0 小时
 楼主| 发表于 2014-7-9 13:21:09 | 显示全部楼层
回复【2楼】2012lc:
---------------------------------
确实写错了,CLK_PCKENR1 = 1<<0;仍进不了中断,要崩溃了呀,大家帮忙呀!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-7-9 20:58:29 | 显示全部楼层
帮顶....
回复

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2014-4-8
在线时间
0 小时
发表于 2014-7-11 14:10:41 | 显示全部楼层
其实是能进去的吧,我之前用的时候那个ARRH  ARRL跟你的值一样的,后来把ARRH改成零就能很快观察到进去了,不知道原理……
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 18:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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