历史上的今天
今天是:2026年01月09日(星期五)
2023年01月09日 | JZ2440点亮LED电路图设计案例
2023-01-09 来源:elecfans
在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<<(4*2))
#define GPF5_out (1<<(5*2))
#define GPF6_out (1<<(6*2))
#define GPF4_msk (3<<(4*2))
#define GPF5_msk (3<<(5*2))
#define GPF6_msk (3<<(6*2))
/*
* S2,S3,S4对应GPF0、GPF2、GPG3
*/
#define GPF0_msk (3<<(0*2))
#define GPF2_msk (3<<(2*2))
#define GPG3_msk (3<<(3*2))
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;
}
史海拾趣
|
pxa270 usbfn 不能连接上pc,activesync一直显示连接,但就是连不上。 我的microsoft activesync是微软官方网站上下载的4.5的版本 1.1 File sync 1.2 Serial 1.3 PXA27x USB Function 1.4 PXA27x Serial 这些组 ...… 查看全部问答> |
|
平台 6410+CE6.0 用DM9000A网络可以正常NK,用DM9000C不可以,提示如下信息: DM9000 ID is 0x90000a46 INFO: Probe: DM9000 is detected. DM9000: MAC Address: 0:11:22:33:44:55 System ready! Preparing for download... INFO: *** Devic ...… 查看全部问答> |
|
听说wince5.0出了最新版本,wince5.0_dublin,有没有哪位仁兄知道哪里可以下载呢? 据说这个版本对蓝牙有了比较全面的支持,不知道它目前都支持了哪些bluetooth profile?… 查看全部问答> |
|
if(FAILED(CoInitializeEx(NULL, COINIT_MULTITHREADED))) return FALSE; HRESULT hr; CLSI ...… 查看全部问答> |
|
请问有什么办法可以不让拔通的GPRS随时都在线呢,我现在用dup方式连接了gprs的DNS服务器,连接也是成功的,最后往它发一些数据,(没有数据返回)但我也不要求有返回的数据,只是想让信道上有定时的有些数据流量,以此来保持状态.但是过45分钟后,GPRS还是断 ...… 查看全部问答> |
|
請問smdk6400開機停在starting kernel...地問題 各位大大好 小弟想請教一下個問題 我在complier完load進smdk6400主板 但系統一開機執行到Starting kernel... 就當掉哩~~~ 有什麼方向可以去追緃嗎 謝謝~~~… 查看全部问答> |




