/*********************************************************************** * File: buzzer_led.c * Version: 1.0.0 * Copyright: 2011 (c) Guo Wenxue * Description: This C code used to turn buzzer on/off on FL2440 board * ChangeLog: 1, Release initial version on "Tue Mar 22 21:58:24 CST 2011" * ***********************************************************************/ #define GPBCON (*(unsigned long volatile *)0x56000010) #define GPBDAT (*(unsigned long volatile *)0x56000014) #define GPBUP (*(unsigned long volatile *)0x56000018) #define BEEP 0 /* Buzzer use GPB0 */ #define LED0 5 /* LED0 use GPB5*/ #define LED1 6 /* LED1 use GPB6*/ #define LED2 8 /* LED2 use GPB8*/ #define LED3 10 /* LED3 use GPB10*/ #define DELAY_TIME 40000000 unsigned int led_gpio[4] = {5,6,8,10}; static inline void delay (unsigned long loops) { __asm__ volatile ("1:\n" "subs %0, %1, #1\n" "bne 1b":"=r" (loops):"0" (loops)); } void init_led_buzzer(void) { GPBCON = (GPBCON|0x333C03)&0x111401; /* Set GPB0,GPB5,GPB8,GPB10 as GPIO input mode */ GPBDAT |= 0x560; /* Set GPB0,GPB5,GPB6,GPB8,GPB10 as high level */ } void turn_led_on(int led) { if(led > 3) return; /* Set GPIO port as low level */ GPBDAT = (GPBDAT & ( ~(1< key=0, turn LED0 on, beep for 1 time * Key3 pressed -> key=1, turn LED1 on, beep for 2 time * Key4 pressed -> key=2, turn LED2 on, beep for 3 time * Key5 pressed -> key=3, turn LED3 on, beep for 4 time */ void turn_led_buzzer_on(int key) { turn_led_on(key); /* Set correspond LED on */ turn_buzzer(key+1); /* Let buzzer beep for $key times */ }