/******************************************************************************************** * File: led_beep.c * Version: 1.0.0 * Copyright: 2011 (c) Guo Wenxue * Description: LED & Beep operate funciton. * ChangeLog: 1, Release initial version on "Tue Jul 12 16:43:18 CST 2011" * *******************************************************************************************/ #include #define DELAY_TIME 1000000 /*LED & Beep */ #define GPBCON (*(unsigned long volatile *)0x56000010) #define GPBDAT (*(unsigned long volatile *)0x56000014) #define GPBUP (*(unsigned long volatile *)0x56000018) inline void delay(unsigned long loops) { __asm__ volatile ("1:\n" "subs %0, %1, #1\n" "bne 1b":"=r" (loops):"0"(loops)); } void init_led_beep(void) { /* Set GPB5,GPB6,GPB8,GPB10 as GPIO mode(0x01) */ GPBCON = (GPBCON | 0x333C03) & 0x111401; GPBUP = (GPBUP | 0x560); /* Set GPB5,GPB6,GPB8,GPB10 as high level, to turn LED0,LED1,LED2,LED3 off */ GPBDAT = (GPBDAT | 0x560); } void turn_led_on(int led) { GPBDAT = (GPBDAT & (~(1 << led))); delay(DELAY_TIME); } void turn_led_off(int led) { /* Turn LED0 on */ GPBDAT = (GPBDAT | (1 << led)); delay(DELAY_TIME); } void beep(int count) { int i; for (i = 0; i < count; i++) { GPBDAT |= 1 << BEEP; /* Set Beep GPIO as high level */ delay(DELAY_TIME * 50); GPBDAT &= ~(1 << BEEP); /* Set Beep GPIO as low level */ delay(DELAY_TIME * 50); } }