?? rtc_irq.c
字號:
#include "my_printf.h"
#include "led.h"
#define READ(addr) (*((volatile int *)(addr)))
#define WRITE(addr, data) (*((volatile int *)(addr)) = (data))
volatile int time;
volatile int ii;
extern int qq;
extern int jj;
extern int uu;
void do_irq( void )
{
if ( qq == 0)
{
my_printf("read from rtc:%d\n\r", READ(0x10002004));
READ(0x100030a4);
READ(0x1000300c);
time++;
if (time == 5)
{
WRITE(0X10003008, 0x06);
*(volatile unsigned long *)(0x10000000)=0x0;
ii = 1;
return;
}
}
else
{
if ( (jj % 2) == 0 )
{
//for(; pp < 4 ; pp++)
sLedout(0xffff, time);
}
else
{
// for(; pp < 4 ; pp++)
time--;
sLedout(0x0, time);
}
jj++;
READ(0x100030a4);
READ(0x1000300c);
if (time == 4)
{
WRITE(0X10003008, 0x06);
*(volatile unsigned long *)(0x10000000)=0x0;
uu = 1;
return;
}
time++;
}
return ;
}
void rtc_test(void)
{
qq = 0;
time = 0;
ii = 0;
//initialize the interrupt controller:
*(volatile unsigned long *)(0x10000000)=0xfffffffe;//enable all
*(volatile unsigned long *)(0x10000008)=0xEfffffff;//mask all except timer
WRITE(0x10002004, 0x0);
WRITE(0x1000200c, 0x0);
WRITE(0X10003000, 75000000);
WRITE(0X10003008, 0x02);
WRITE(0X10003008, 0x03);
while ( !ii );
}
void install_irq_handler( void (*isr)(void) )
{
/* ARM irq exception vector addr is 0x00000018 */
unsigned int * irq_vec_addr = ( unsigned int * ) 0x18;
/* this is isr entry address, could be another address like 0x3c, 0x58... */
unsigned int * isr_entry_addr = ( unsigned int * ) 0x38;
unsigned int instruction;
/* set the ISR entry at 0x38 */
*isr_entry_addr = (unsigned int)isr;
/* make an instruction: it is machine-code for "ldr pc, [pc, #(38-18-8)]" */
instruction = ((unsigned int) isr_entry_addr - (unsigned int)irq_vec_addr - 0x08) | 0xe59ff000;
/* set this instruction at 0x18 */
*irq_vec_addr = instruction;
return;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -