JZ2440点亮LED电路图设计案例

2023-01-09  

在JZ2440中,点亮LED就是给LED的控制位设置为输出,数据位设置为低电平,而通过按键点亮LED,就需要将按键对应的控制位设置为输出。


下面是JZ2440的3个LED电路图:

下面是JZ2440的3个按键的电路图

通过查找nLED_1,nLED_2,nLED_4对应的引脚,发现它们分别对应GPF4,GPF5,GPF6,如图:

通过查找EINT0,EINT2,EINT11对应的引脚,发现它们分别对应GPF0,GPF2,GPG3,如图:

由此,我们再去看2440的Datasheet,查看它们的控制位和数据位的信息,首先是GPF4,GPF5,GPF6的控制位信息,如图:

我们发现,当GPFCON寄存器的GPF4,GPF5,GPF6的控制位设置为01时,表示控制输出,这正是我们想要的。在看看它们的数据位是怎么设置的,如图:

由表格可知,当端口被配置为输出端口时,它的引脚状态和相应的位相同。也就是说,如果我想让LED1亮,那么我就要把它对应的GPF4配置为输出,然后将GPFDAT的第4位设置为0.

再看看按键对应的寄存器怎么配置,上面说到S2,S3,S4对应的控制寄存器相应的位是GPF0,GPF2和GPG3

由于按键是个输入设备,所以我们需要将GPF0,GPF2,GPG3的位设置为00。到此,LED和按键寄存器我们已经配置好了,下面看一下代码:

首先是一段汇编代码,由这段汇编代码引导到main函数,同时进行相应的硬件配置


下面主程序:

#define GPFCON (*(volatile unsigned long *)0x56000050)

#define GPFDAT (*(volatile unsigned long *)0x56000054)

#define GPGCON (*(volatile unsigned long *)0x56000060)

#define GPGDAT (*(volatile unsigned long *)0x56000064)

/*

* LED1,LED2,LED4对应GPF4、GPF5、GPF6

*/

#define GPF4_out (1<#define GPF5_out (1<#define GPF6_out (1<#define GPF4_msk (3<#define GPF5_msk (3<#define GPF6_msk (3</*

* S2,S3,S4对应GPF0、GPF2、GPG3

*/

#define GPF0_msk (3<#define GPF2_msk (3<#define GPG3_msk (3<int main()

{

unsigned long dwDat;

// LED1,LED2,LED4对应的3根引脚设为输出,将这些位清零

//先把9,、9、10、11、12、13位清零,然后或操作设为输出01

GPFCON &= ~(GPF4_msk | GPF5_msk | GPF6_msk);

GPFCON |= GPF4_out | GPF5_out | GPF6_out;

// S2,S3对应的2根引脚设为输入

GPFCON &= ~(GPF0_msk | GPF2_msk);

// S4对应的引脚设为输入

GPGCON &= ~GPG3_msk;

while(1){

//若Kn为0(表示按下),则令LEDn为0(表示点亮)

dwDat = GPFDAT; // 读取GPF管脚电平状态

if (dwDat & (1<<0))        // S2没有按下

GPFDAT |= (1<<4);       // LED1熄灭

else

GPFDAT &= ~(1<<4);      // LED1点亮

if (dwDat & (1<<2))         // S3没有按下

GPFDAT |= (1<<5);       // LED2熄灭

else

GPFDAT &= ~(1<<5);      // LED2点亮

dwDat = GPGDAT; // 读取GPG管脚电平状态

if (dwDat & (1<<3))         // S4没有按下

GPFDAT |= (1<<6);       // LED3熄灭

else

GPFDAT &= ~(1<<6);      // LED3点亮

}

return 0;

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。