由于暂时找不到上次文件的按钮,所以贴代码如下。
#define GPIO_PIN_MASK 0xFFu
#define GPIO_PIN(x) (((1)<<(x & GPIO_PIN_MASK)))
char led_mode = 0;
void enable_irq (int irq)
{
int div;
/* Determine which of the NVICISERs corresponds to the irq */
div = irq/32;
switch (div)
{
case 0x0:
NVICICPR0 = 1 << (irq%32);
NVICISER0 = 1 << (irq%32);
break;
case 0x1:
NVICICPR1 = 1 << (irq%32);
NVICISER1 = 1 << (irq%32);
break;
case 0x2:
NVICICPR2 = 1 << (irq%32);
NVICISER2 = 1 << (irq%32);
break;
}
}
//delay 1ms , unit is ms
void delay_1ms(int Ms)
{
unsigned short i,j;
for(i=0;i<Ms;i++)
{
for(j=0;j<2000;j++)
asm("nop");
}
}
void flashing()
{
GPIOB_PDOR |= (GPIO_PIN(18) ); // turn off
GPIOB_PDOR &= ~GPIO_PIN(11); // turn on
delay_1ms(1000);
GPIOB_PDOR &= ~(GPIO_PIN(18)); // turn on
GPIOB_PDOR |= GPIO_PIN(11); // turn off
delay_1ms(1000);
}
void twinkle()
{
GPIOB_PDOR |= (GPIO_PIN(18) | GPIO_PIN(11)); // turn off
delay_1ms(1000);
GPIOB_PDOR &= ~(GPIO_PIN(18) | GPIO_PIN(11)); // turn on
delay_1ms(1000);
}
int main(void)
{
// turn on port D clocks
SIM_SCGC5 |= (SIM_SCGC5_PORTB_MASK|SIM_SCGC5_PORTA_MASK);
// Set pin18 of PORTB as GPIO
PORTB_PCR18 |= PORT_PCR_MUX(1);
// set pin11 of PORTB as GPIO
PORTB_PCR11 |= PORT_PCR_MUX(1);
// set pin18, pin11 to be output
GPIOB_PDDR |= GPIO_PIN(18)|GPIO_PIN(11);
//key as gpio port,falling interrupt
PORTA_PCR5 |= ( PORT_PCR_IRQC(10)|PORT_PCR_MUX(1)|PORT_PCR_PFE_MASK);
// open globe intterrupt
asm("CPSIE i");
// enable irq
enable_irq(87);
while(1)
{
if(led_mode)
flashing(); // flashing leds
else
twinkle(); // twinkle leds
}
return 0;
}
|