#define gpj2con *((volatile unsigned*)0xe0200280)
#define gpj2dat *((volatile unsigned*)0xe0200284)
#define wtd_con *(unsigned*)0xe2700000
#define wtd_dat *(unsigned*)0xe2700004
#define wtd_cnt *(unsigned*)0xe2700008
#define wtd_int_clr *(unsigned*)0xe270000c
#define vic0_select *(unsigned*)0xf200000c
#define vic0_int_enable *(unsigned*)0xf2000010
#define vic0_addr27 *(unsigned*)0xf200016c
#define vic0_vectaddress *(unsigned*)0xf2000f00
#define vic1_vectaddress *(unsigned*)0xf2100f00
#define vic2_vectaddress *(unsigned*)0xf2200f00
#define vic3_vectaddress *(unsigned*)0xf2300f00
void wtd_init(void );
void vic0_init( void );
void cpu_int_on( void );
void isr( void );
void led_init( void);
void led_on( char );
void clear_int(void);
char on=0xf;
void _start(void )
{
led_init();
wtd_init();
vic0_init();
cpu_int_on();
}
void wtd_init( void )
{
wtd_con = wtd_con & ~(3<<3) & ~(0xff<<8) | (65<<8);
wtd_cnt = 62500;
wtd_dat = 62500;
wtd_con = wtd_con & ~1 | ( 1<<2 ) | ( 1 << 5 );
}
void vic0_init(void)
{
vic0_select = vic0_select & ~(1<<27);
vic0_int_enable |= (0x1<<27);
vic0_addr27 = isr;
}
void clear_int( void )
{
wtd_int_clr = 0;
vic0_vectaddress = 0;
vic1_vectaddress = 0;
vic2_vectaddress = 0;
vic3_vectaddress = 0;
}
void led_init( void )
{
gpj2con = gpj2con & ~0xffff | 0x1111;
}
void led_on( char on)
{
gpj2dat = gpj2dat & ~0xf | on;
}
void cpu_int_on(void)
{
__asm__ __volatile__(
"mrs r0, cpsr"
"bic r0, #0x80"
"orr r0, #0x40"
"msr cpsr, r0"
:
:
);
void isr()
{
led_on(on);
on = ~on;
}