arm定时器4
来源:互联网 发布:mac拼音切换 编辑:程序博客网 时间:2024/05/06 21:00
board/timer4led.c
#include "stdio.h"#include "s5pv210.h"void t4_init(){//TCFG0[15:8] = 99//设置t4预分频值rTCFG0 &=~(0xff<<8);rTCFG0 |=(0x63<<8);//TCFG1[19:16] = 0100//选择PWM定时器的选通输入rTCFG1 &=~(0xf<<16);rTCFG1 |=(0x4<<16);//TCNTB4[] = 41250rTCNTB4=41250;// 计数器大小66MHZ/(99+1)/16。这里为1秒//TINT_CSTAT[4]=1;[9]=1;//定时器中断激活,而且状态位,写1清除rTINT_CSTAT |=(0x210<<0);//TCON[21] = 1;//TCON[21] = 0;//TCON[22] = 1;//auto reload相当于开关中断rTCON &=~(0x3<<21);rTCON |=(0x3<<21);rTCON &=~(0x1<<21);}void Timer4_isr(){printf("timer4 time out\n");//TINT_CSTAT[9] = 1; clear flag rTINT_CSTAT |=(0x1<<9);rVIC0ADDRESS = 0x0;rGPJ2DAT ^=(0x1<<0);//rGPD0DAT ^=(0x1<<0);}void t4_vic0init(){//VIC0INTENCLEAR[25] = 0rVIC0INTENCLEAR &=~(0x1<<25);//VIC0INTSELECT[25] = 0 -> EINT16 IRQrVIC0INTSELECT &=~(0x1<<25);//VIC0INTENABLE[25] = 1 -> EINT16 ENABLE *((unsigned int *)0xf2000164) = (unsigned int)Timer4_isr;rVIC0ADDRESS = 0x0;rVIC0INTENABLE |=(0x1<<25);}void t4_onoff(){//TCON[20] = 1;rTCON |=(0x1<<20);}void led_init(){//GPJ2CON[3:0] = 0B0001rGPJ2CON &=~(0xffff<<0);rGPJ2CON |=(0x1111<<0);//GPJ2DAT[0] = 0/1 rGPJ2DAT |=(0xf<<0);rGPD0CON &=~(0xf<<0);rGPD0CON |=(0x1<<0);//rGPD0DAT |=(0xf<<0);}int timer4led(){led_init();t4_init();t4_vic0init();t4_onoff();//while(1);}cpu/board.c
#include "stdio.h"#include "api.h"int start_armboot(){printf(">>>>> welcome to c <<<<<<<\n"); timer4led();return 0;}
cpu/start.S
.text .extern uart_init.extern printf.extern start_armboot.global _start_start:mov r5,lr bl uart_initldr r0,=fmtbl printfbl exc_vectablebl cpsr_initbl start_armbootreturn_uboot:mov lr,r5bx lr cpsr_init:mrs r0,cpsrbic r0,r0,#0xc0msr cpsr,r0bx lr exc_vectable:ldr r0,=Handler_IRQldr r1,=0xd0037418@iram里的地址str r0,[r1]bx lr Handler_IRQ:sub lr,lr,#4stmfd sp!,{r0-r12,lr}ldr lr,=return_irqldr r0,=0xf2000000@vic0地址ldr r1,[r0]cmp r1,#0beq return_irqldr r0,=0xf2000f00@VIC0ADDRESS地址ldr pc,[r0]return_irq:ldmfd sp!,{r0-r12,pc}^fmt:.asciz ">>>>> welcome to arm <<<<<<<\n".end
makefile
CC = arm-linux-gccLD = arm-linux-ld OBJCOPY = arm-linux-objcopy INCLUDEDIR := $(shell pwd)/include/CPPFLAGS := -nostdinc -nostdlib -I$(INCLUDEDIR)CFLAGS := -fno-builtin -Wall -O2 export CC LD OBJCOPY CPPFLAGS CFLAGS OBJS := cpu/start.o cpu/board.o board/timer4led.o lib/uart.o lib/libc.a all:start.bin cleanstart.bin:$(OBJS)$(LD) -Ttext=0x40000000 $(OBJS) -o start.elf$(OBJCOPY) -O binary -S start.elf $@%.o:%.S$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@%.o:%.c$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@clean:rm -rf ./start.elfmake clean -C cpumake clean -C board
说明:
这里要用到中断,因为没有输出,内部进行定时。
参考:
http://blog.chinaunix.net/uid-28458801-id-3808196.html
0 0
- arm定时器4
- ARM定时器
- ARM定时器
- ARM定时器
- 【ARM】arm定时器
- ARM中定时器浅谈
- ARM看门狗定时器设置
- arm定时器0
- ARM,S3C2410中脉宽调制定时器
- ARM的定时器的学习
- ARM裸机之定时器中断
- ARM的PWM定时器1
- ARM的PWM定时器2
- ARM的看门狗定时器进阶
- ARM学习——定时器PWM
- ARM学习之定时器Timer0实验
- arm定时器初值及公式 的熟悉
- [STM32学习笔记2]SysTick定时器 - [ARM]
- 题目1 : Performance Log--微软题目
- struts2项目出现500错误
- 渐进式迁移 — 保证稳定性的一种方法
- js中判断浏览器的类别
- vetor和数组的区别 vector和List的区别
- arm定时器4
- 如何快速构建基于Spring4.0的Rest API(攻略)
- php 生产验证码
- 数组实现的队列(限制最大长度)的head、tail指针的修改方法。
- 余佳文发微博致歉:炒作可耻
- WebViewJavascriptBridge源码分析
- Find them, Catch them
- HDU 1598 find the most comfortable road
- C++基础---指针与堆