#include "nuc1xx.h"
#include "DrvSYS.h"
typedef
enum
{NO=0, YES=!NO}BOOL_T;
#define BEEP_OE GPIOB->PMD.PMD10 = 1 // BEEP輸出
#define KEY_IE (*(uint32_t *)&GPIOB->PMD) &= 0x0FFFFFFF
#define LED_OE (*(uint32_t *)&GPIOA->PMD) |= 0x00000150
#define Close_BEEP GPIOB->DOUT&=~(1<<10)
#define Open_BEEP GPIOB->DOUT|=1<<10
#define Close_LED1 GPIOA->DOUT|=1<<2
#define Open_LED1 GPIOA->DOUT&=~(1<<2)
#define Close_LED2 GPIOA->DOUT|=1<<3
#define Open_LED2 GPIOA->DOUT&=~(1<<3)
#define Close_LED3 GPIOA->DOUT|=1<<4
#define Open_LED3 GPIOA->DOUT&=~(1<<4)
#define Read_KEY1 (GPIOB->PIN>>15)&0x1
#define Read_KEY2 (GPIOB->PIN>>14)&0x1
void
MAIN_INIT(
void
);
void
TMR0_IRQHandler(
void
) __irq;
BOOL_T Flag_tmr0_20ms = NO;
void
MAIN_INIT(
void
)
{
UNLOCKREG();
{
SYSCLK->PWRCON.XTL12M_EN = 1;
DrvSYS_Delay(5000);
DrvSYS_SelectPLLSource(E_SYS_EXTERNAL_12M);
DrvSYS_Open(50000000);
}
{
BEEP_OE; Close_BEEP;
LED_OE; Close_LED1; Close_LED2;
KEY_IE;
}
{
NVIC_DisableIRQ(TMR0_IRQn);
SYSCLK->CLKSEL1.TMR0_S = 0;
SYSCLK->APBCLK.TMR0_EN =1;
TIMER0->TCSR.CEN = 1;
TIMER0->TCSR.MODE = 1;
TIMER0->TCSR.CRST = 1;
TIMER0->TCSR.PRESCALE = 11;
TIMER0->TCMPR = 5000;
TIMER0->TISR.TIF = 1;
TIMER0->TCSR.IE = 1;
NVIC_EnableIRQ(TMR0_IRQn);
TIMER0->TCSR.CRST = 1;
TIMER0->TCSR.CEN = 1;
}
LOCKREG();
}
void
TMR0_IRQHandler(
void
) __irq
{
TIMER0->TISR.TIF = 1;
Flag_tmr0_20ms = YES;
}
int
main(
void
)
{
uint8_t KEY_OldVal[2] = {1,1};
uint8_t KEY_NewVal[2] = {1,1};
uint8_t LED_Val[3] = {1,1,1};
MAIN_INIT();
while
(1) {
if
(Flag_tmr0_20ms != NO) {
Flag_tmr0_20ms = NO;
KEY_NewVal[0] = Read_KEY2;
KEY_NewVal[1] = Read_KEY1;
if
(KEY_NewVal[0] ^ KEY_OldVal[0]) {
KEY_OldVal[0] = KEY_NewVal[0];
LED_Val[0] = KEY_OldVal[0];
}
if
(KEY_NewVal[1] ^ KEY_OldVal[1]) {
if
(KEY_OldVal[1]
)
LED_Val[1] = LED_Val[1] ? 0 : 1;
if
(
KEY_NewVal[1])
LED_Val[2] = LED_Val[2] ? 0 : 1;
KEY_OldVal[1] = KEY_NewVal[1];
}
if
(!LED_Val[0]) Open_LED1;
else
Close_LED1;
if
(!LED_Val[1]) Open_LED2;
else
Close_LED2;
if
(!LED_Val[2]) Open_LED3;
else
Close_LED3;
}
if
(0)
break
;
}
return
0;
}