1)可以在软件中设置进入中断的条件,比如下面这个例子,
void Init_Flags(void)
{
*pFIO_DIR |= PF0|PF1;
*pFIO_EDGE |= PF0|PF1;
*pFIO_MASKA_D |= PF0|PF1;
}
void Init_Interrupts(void)
{
*pSIC_IAR2 &= ~0x0000f000;
*pSIC_IAR2 |= 0x00005000;
register_handler(ik_ivg12, FlagA_ISR);
*pSIC_IMASK |= 0x00080000;
}
EX_INTERRUPT_HANDLER(FlagA_ISR)
{
if((*pFIO_FLAG_D&PF0) == PF0)
{
printf("interrupt is PF0!\n");
}
else if((*pFIO_FLAG_D&PF1) == PF1)
{
printf("interrupt is PF1!\n");
}
*pFIO_FLAG_C = PF0|PF1;
}
void main(void)
{
Set_PLL(16,3);
Init_EBIU();
Init_SDRAM();
Init_Flags();
Init_Interrupts();
while(1)
{
*pFIO_FLAG_S = PF0;
delay(300);
}
}
如果要进入中断的话,在程序加入*pFIO_FLAG_S = PF0;
2)初始化中断的时候直接设定GPIO的中断PPI的中断的中断等级就行了,ik_ivgX X越大优先级越低,比如在BF53X中要配置GPIO的中断高于PPI中断
GPIO中断
*pSIC_IAR2 &= ~0x0000f000;
*pSIC_IAR2 |= 0x00003000;
register_handler(ik_ivg10, FlagA_ISR);
*pSIC_IMASK |= 0x00080000;
PPI中断
*pSIC_IAR1 &= ~0x0000000f;
*pSIC_IAR1 |= 0x00000004;
register_handler(ik_ivg11, DMA0_PPI_ISR);
*pSIC_IMASK |= 0x00000100;
里面的子函数在程序中有,属于底层函数,这里就不贴出来。
void LCD_PutChar8x16(unsigned short x, unsigned short y, char c, unsigned int fColor, unsigned int bColor)
{
unsigned int i,j;
LCD_SetPos(x,x+8-1,y,y+16-1);
for(i=0; i<16;i++) {
unsigned char m=Font8x16[c*16+i];
for(j=0;j<8;j++) {
if((m&0x80)==0x80) {
Write_Data_U16(fColor);
}
else {
Write_Data_U16(bColor);
}
m<<=1;
}
}
}
英文字库8*16的