#include "HAL.h" #include "OS_CPU.h" /*****************************************************/ /*uart base config*/ #define UART_BPS 115200 #define UART_DATABITS 8 #define UART_STOPBITS 1 extern void TickHandler(void); #define ISR_ENTRY() asm volatile(" sub lr, lr,#4\n" \ " stmfd sp!,{r0-r12,lr}\n" \ " mrs r1, spsr\n" \ " stmfd sp!,{r1}") #define ISR_EXIT() asm volatile(" ldmfd sp!,{r1}\n" \ " msr spsr_c,r1\n" \ " ldmfd sp!,{r0-r12,pc}^") void uart_init(void) { u32 fdiv; /*1.select pin*/ PINSEL0=(PINSEL0&(~0x0F))|0x05; /*2.uart register config*/ UxLCR0=(UART_DATABITS-5)|((UART_STOPBITS-1)<<2)|(1<<7); fdiv=(Fpclk/16)/UART_BPS; UxDLL0=fdiv%256; UxDLM0=fdiv/256; UxLCR0=(UART_DATABITS-5)|((UART_STOPBITS-1)<<2); } void timer0_isr(void)__attribute__((naked)); void uart_SendByte(s8 c) { while ((UxLSR0&0x20)==0); UxTHR0=c; } void uHALr_printf(const char* fromat) { while (*fromat!='\0') { uart_SendByte(*fromat++); } } /*******************************************/ //初始化系统中断 void uHALr_InitInterrupts(void) { // VICIntEnClr=0xFFFFFFFF; //禁止全部中断使能 //使用IRQ,不使用FIQ ARMEnableInt(); } void _udef_isr(void) { uHALr_printf("udef"); } void _pabt_isr(void) { uHALr_printf("pabt"); } void _dabt_isr(void) { uHALr_printf("dabt"); } void timer0_isr(void) { ISR_ENTRY(); T0IR=0x01; uHALr_printf("timer0\r\n"); TickHandler(); VICVectAddr=0x0; ISR_EXIT(); } //初始化系统时钟中断 void uHALr_InstallSystemTimer(void) { VICIntSelect=0x0; VICVectCntl0=0x20|(0x04);// VICVectAddr0=(u32)TickHandler; // VICVectAddr0=(u32)timer0_isr; //uHALr_printf("run"); } void uHALr_InitTimers(void) { T0IR=0xFF; T0TC=0x0; T0PR=0x0; T0MCR=0x03; T0MR0=Fpclk/100; //10ms T0TCR=0x01; VICIntEnable=(1<<0x4); //使能TIMER0 }