JZ2440:GPIO


对jz2440上GPIO 的讲解,由于有点太基础,就只说说板子上的LED的控制:

1.JZ2440板载LED

硬件接口/资源

方向

控制信号名称

描述

丝印

GPF4

O

nLED_1

低电平点亮

D10

GPF5

O

nLED_2

低电平点亮

D11

GPF6

O

nLED_3

低电平点亮

D12

2. 相应寄存器

PORT F CONTROL REGISTERS (GPFCON, GPFDAT)

寄存器

地址

R/W

描述

复位值

GPFCON

0x56000050

R/W

Configures the pins of port F

0x0

GPFDAT

0x56000054

R/W

The data register for port F

Undef.

GPFUP

0x56000058

R/W

Pull-up disable register for port F

0x000


GPFCON

Bit

Description

GPF7

[15:14]

00 = Input                01 = Output

10 = EINT[7]             11 = Reserved

GPF6

[13:12]

00 = Input                01 = Output

10 = EINT[6]             11 = Reserved

GPF5

[11:10]

00 = Input                01 = Output

10 = EINT[5]             11 = Reserved

GPF4

[9:8]

00 = Input                01 = Output

10 = EINT[4]             11 = Reserved

GPF3

[7:6]

00 = Input                01 = Output

10 = EINT[3]             11 = Reserved

GPF2

[5:4]

00 = Input                01 = Output

10 = EINT2]              11 = Reserved

GPF1

[3:2]

00 = Input                01 = Output

10 = EINT[1]             11 = Reserved

GPF0

[1:0]

00 = Input                01 = Output

10 = EINT[0]             11 = Reserved

 

GPFDAT

Bit

Description

GPF[7:0]

[7:0]

When the port is configured as an input port, the corresponding bit is the

pin state. When the port is configured as an output port, the pin state is

the same as the corresponding bit.  

When the port is configured as functional pin, the undefined value will be

read.

 

GPFUP

Bit

Description

GPF[7:0]

[7:0]

0:使能

1:禁止

 3. 程序举例

main.c

#define GPFCON *((volatile unsigned long*)0x56000050)
#define GPFDAT *((volatile unsigned long*)0x56000054)
#define GPFUP  *((volatile unsigned long*)0x56000058)

#define LEDON   GPFDAT &= ~(1 << 5);
#define LEDOFF  GPFDAT |=  (1 << 5);
void delay(unsigned long de20ns)
{
    unsigned long j;
   for (; de20ns; de20ns--);
}

int main(int argc, const char *argv[])
{
    GPFCON |= 1 << 2*5; // GPF5
    
    while (1)
    {
        LEDOFF;
        delay(500000);
        LEDON;
        delay(500000);
    }
    
    return 0;
}
程序说明

上边的main.c程序只是程序的一部分,程序的其他部分,可以到git@osc 上下载。下载完之后,将新建一个main.c,将程序写完,更改一下Makefile中的目标文件TARGET指定。make生成目标文件,便能下载到板子上运行了。程序生成都会统一放到build目录下边。

在程序中我只点亮了 D11 灯,并且让他大概是1s的闪烁,至于程序中的延时,说实话,我是试出来的,延时的大概思路是这样的:

板子的 crt.S 中我设置的时钟频率是这样的:FCLK 200MHZ, HCLK 100MHZ, PCLK 50MHZ,GPIO使用的时钟是PCLK(这里的内容如果不懂,可以查看我之前的文章)。因此,单周期指令的执行周期是20ns,但由于存在流水线,所以一个指令执行时占用多少周期是不定的,因此,估算有点困难。我们可以看build目录下边的反汇编文件boot.dis文件查看,delay到底多少语句,然后,大致的估算。


你可能感兴趣的:(GPIO,jz2440)