您尚未登录。

楼主 #1 2018-08-20 09:11:15

Jin劲
会员
注册时间: 2018-04-06
已发帖子: 217
积分: 217

f1c100s怎样才能timer产生并进入中断?

我目前是这样的
中断向量表正常
SVC模式 启动timer0 开启了timer0 irq enable
读cur value 寄存器得知timer0在跑 timer的pending标志是1
但是不进入中断 请教一下漏了哪些步骤
看demod的例子,也是没有中断的 只是循环查询pending标志位

离线

楼主 #2 2018-08-20 09:19:40

Jin劲
会员
注册时间: 2018-04-06
已发帖子: 217
积分: 217

Re: f1c100s怎样才能timer产生并进入中断?

昨天用jlink查看是<SVC mod,frq dis,irq dis>
是不是还需要修改CPSR寄存器的irq位来开启irq?
哇 好想试试 可惜还在上班 只能下班回去试

离线

#3 2018-08-20 09:50:57

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: f1c100s怎样才能timer产生并进入中断?

这个,中断还不会玩,表示关注一下.





离线

#4 2018-08-20 16:56:05

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: f1c100s怎样才能timer产生并进入中断?

QQ20180820164457.png

__irq void sysIrqHandler()
{
	static int i = 0;
	i++;
}

#define INTC_EN_REG0			(0x01C20400 + 0x20)
#define INTC_MASK_REG0		(0x01C20400 + 0x30)

int main(void)
{
	//void* _mOldIrqVect = *(void volatile *)0x38;
	*(void* volatile *)0x38 = (void* volatile)sysIrqHandler;
	
  sys_clock_init();
  sys_uart_init();
	
	write32(TMR_IRQ_EN_REG, 1);
	
	write32(INTC_EN_REG0, (read32(INTC_EN_REG0)) | 1 << 13);
	
	write32(TMR_IRQ_EN_REG, (read32(TMR_IRQ_EN_REG)) | 1 << 13);
	
	write32(TMR0_INTV_VALUE_REG, 0x2EE0);   //Set interval value 
	
	write32(TMR0_CTRL_REG, 0x10);   //Select Single mode,24MHz clock source,2 pre-scale 
	
	write32(TMR0_CTRL_REG, read32(TMR0_CTRL_REG)|(1<<1)); //Set Reload bit 

	while((read32(TMR0_CTRL_REG)>>1)&1);  //Waiting Reload bit turns to 0 
	
	write32(TMR0_CTRL_REG, read32(TMR0_CTRL_REG)|(1<<0));  //Enable Timer0 
	
	
	u32_t temp;	
	__asm
	{
		 MRS    temp, CPSR
		 AND    temp, temp, 0x7F
		 MSR    CPSR_c, temp
	}
			
	u32_t old = 0;	
  while(1)
  {
		//sysprintf("hello %s: %d 0x%x \n", "world", 10, 20);
    //sys_uart_putc('A');
		volatile u32_t a = read32(TMR0_CUR_VALUE_REG);
		if(old == a)
		{			
		}
		else
		{
			old = a;
			if(a % 256 == 0)
			{
				sysprintf("%d\n", a);
			}
		}
  }
  
  u32_t cnt = 0;
  
   GPIOG->CFG[0] = (1 << 0) << 8;

  for(;;)
  {
    if(cnt==0)
      GPIOG->DAT &= ~(1U << 2);
    if(cnt==100000)
      GPIOG->DAT = 1U << 2;
    if(++cnt>200000)cnt = 0;
  }




	
	int i = 0;
	while(1)
	{
		i++;
	}
	
	return 0;
}

实现了定时器中断的简单demo: f1c100s_project_run_in_sram_6.7z

仍然感谢新唐提供的裸奔程序。





离线

#5 2019-03-11 20:10:54

wadezyb
会员
注册时间: 2018-08-18
已发帖子: 3
积分: 3

Re: f1c100s怎样才能timer产生并进入中断?

*(void* volatile *)0x38 = (void* volatile)sysIrqHandler;

这句话怎么理解? 为何是0X38呢?

离线

#6 2019-03-11 21:06:40

超级萌新
会员
注册时间: 2018-05-04
已发帖子: 408
积分: 407

Re: f1c100s怎样才能timer产生并进入中断?

wadezyb 说:

*(void* volatile *)0x38 = (void* volatile)sysIrqHandler;

这句话怎么理解? 为何是0X38呢?

arm9体系结构决定的,这个地址就是 irq 的中断地址。

把新的指针(地址)放到这个地址。


在 cortex M3 里面,不再是存中断地址 而是一条 跳转指令。

离线

#7 2019-03-13 09:43:51

九霄云外
会员
注册时间: 2019-01-09
已发帖子: 100
积分: 100

Re: f1c100s怎样才能timer产生并进入中断?

厉害,在搞这么底层的东西,准备上自己的操作系统吗






小薏科技------全志F系列芯片供应、方案开发、技术支持 QQ:610943940

离线

#8 2020-04-01 19:10:48

armstrong
会员
注册时间: 2019-04-10
已发帖子: 246
积分: 180.5

Re: f1c100s怎样才能timer产生并进入中断?

超级萌新 说:

arm9体系结构决定的,这个地址就是 irq 的中断地址。

把新的指针(地址)放到这个地址。


在 cortex M3 里面,不再是存中断地址 而是一条 跳转指令。

你说反了。应该是Cortex-M3里面不再是跳转指令而是中断函数地址。
ARM9里0x38放的是函数地址,0x18地址是跳转指令;一般放的是LDR指令,负责把0x38处的函数地址Load到PC实现跳转。

最近编辑记录 armstrong (2020-04-01 19:12:21)

离线

#9 2020-04-01 19:54:50

TivonLiu
会员
注册时间: 2019-12-27
已发帖子: 46
积分: 36

Re: f1c100s怎样才能timer产生并进入中断?

看看前几天写的,不过是RTT用的
https://whycan.cn/t_3984.html

离线

#10 2020-04-01 20:09:46

TivonLiu
会员
注册时间: 2019-12-27
已发帖子: 46
积分: 36

Re: f1c100s怎样才能timer产生并进入中断?

Jin劲 说:

我目前是这样的
中断向量表正常
SVC模式 启动timer0 开启了timer0 irq enable
读cur value 寄存器得知timer0在跑 timer的pending标志是1
但是不进入中断 请教一下漏了哪些步骤
看demod的例子,也是没有中断的 只是循环查询pending标志位

1 高级中断管理器中的中断向量要打开
2 进中断第一条语句是pending写1清除挂起状态,不然一直进

离线

#11 2020-04-22 13:08:30

834492956
会员
注册时间: 2020-01-10
已发帖子: 11
积分: 1

Re: f1c100s怎样才能timer产生并进入中断?

厉害,在搞这么底层的东西,准备上自己的操作系统吗

离线

#12 2021-08-20 17:06:00

jynjynjyn
会员
注册时间: 2020-11-10
已发帖子: 11
积分: 5

Re: f1c100s怎样才能timer产生并进入中断?

中断还不会用,学习下。是不是需要设置INTC_BASE_ADDR_REG寄存器?

离线

#13 2021-08-21 10:16:05

jynjynjyn
会员
注册时间: 2020-11-10
已发帖子: 11
积分: 5

Re: f1c100s怎样才能timer产生并进入中断?

_20210821101028.jpg
我的timer0和INTC设置如图片所示,但是进不去IRQ_Handler()中断程序,请教论坛大佬们该如何设置,谢谢!

离线

#15 2023-05-05 20:48:46

家猫戏很足
会员
注册时间: 2018-09-16
已发帖子: 14
积分: 4

Re: f1c100s怎样才能timer产生并进入中断?

@超级萌新
这也是一个跳转啊

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn