⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtc_irq.c

📁 uboot底层驱动
💻 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;
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -