欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jz2440——点亮led

程序员文章站 2022-06-08 21:30:23
...

jz2440A芯片简介:

3C2440A 是三星公司推出的16/32位精简指令集(RISC)微型处理器,它基于ARM v9系列的ARM920T核心,主要为手持设备和普通应用提供了低功耗的高性能的小型芯片微型控制器的解决方案。
S3C2440A 的突出特点是其处理器核心,是一个由Advanced RISC Machines(ARM)公司设计的16/32 位ARM920T 的RISC 处理器。ARM920T 实现了MMU,AMBA 总线和哈佛结构高速缓冲体系结构。这一结构具有独立的16KB 指令高速缓存和16KB 数据高速缓存。每个都是由具有8 字长的行(line)组成。
综合对芯片的功能描述,S3C2440A 集成了的以下片上功能:
        ● 1.2V 内核供电, 1.8V/2.5V/3.3V 储存器供电, 3.3V 外部I/O 供电,具备16KB 的指令缓存和16KB 的数据缓存和MMU的微处理器

● 外部存储控制器(SDRAM 控制和片选逻辑)

● LCD 控制器(最大支持4K 色STN 和256K 色TFT)提供1 通道LCD 专用DMA

● 4 通道DMA 并有外部请求引脚

● 3 通道UART(IrDA1.0, 64 字节发送FIFO 和64 字节接收FIFO)

● 2 通道SPI

● 1 通道IIC 总线接口(支持多主机)

● 1 通道IIS 总线音频编码器接口

● AC’97 编解码器接口

● 兼容SD 主接口协议1.0 版和MMC 卡协议2.11 兼容版

● 2 通道USB 主机/1 通道USB 设备(1.1 版)

● 4 通道PWM 定时器和1 通道内部定时器/看门狗定时器

● 8 通道10 位ADC 和触摸屏接口

● 具有日历功能的RTC

● 摄像头接口(最大支持4096×4096 像素输入;2048×2048 像素输入支持缩放)

● 130 个通用I/O 口和24 通道外部中断源

● 具有普通,慢速,空闲和掉电模式

● 具有PLL 片上时钟发生器

一、阅读电路原理图

jz2440共有3个LED灯

1、

jz2440——点亮led

jz2440——点亮led

jz2440——点亮led

由上图可知,三个LED灯分别被连接在芯片上GPF4/5/6三个管脚,故需要配置GPF4/5/6三个管脚。

二、阅读S3C2440A芯片手册

在手册上搜索GPF4/5/6可以找到:

jz2440——点亮led

jz2440——点亮led

需要将GPF4/5/6配置为输出引脚,即8~13配置为00,0~7配置为1

三、使用代码实现

1、汇编语言

/*
*点亮LED2:gpf5
*/

.text
.global _start

_start:
/*
*配置GPF5为输出引脚
*把0x100写到地址0x5600050
*/
	ldr r1, =0x56000050
	ldr r0, =0x100 /* mov r0, #ox100*/
	str r0, [r1]
	
/*
*设置GPF输出高电平
*把0写到地址0x56000054
*/
	ldr r1, =0x56000054
	ldr r0, =0 /* mov r0, #0*/
	str r0, [r1]
	
	/*死循环*/
halt:
	b halt

2、c语言

start.S


.text
.global _start

_start:

	/* 关闭看门狗 */
	ldr r0, =0x53000000
	ldr r1, =0
	str r1, [r0]

	/* 设置内存: sp 栈 */
	/* 分辨是nor/nand启动
	 * 写0到0地址, 再读出来
	 * 如果得到0, 表示0地址上的内容被修改了, 它对应ram, 这就是nand启动
	 * 否则就是nor启动
	 */
	mov r1, #0
	ldr r0, [r1] /* 读出原来的值备份 */
	str r1, [r1] /* 0->[0] */ 
	ldr r2, [r1] /* r2=[0] */
	cmp r1, r2   /* r1==r2? 如果相等表示是NAND启动 */
	ldr sp, =0x40000000+4096 /* 先假设是nor启动 */
	moveq sp, #4096  /* nand启动 */
	streq r0, [r1]   /* 恢复原来的值 */
	

	bl main

halt:
	b halt
	

main.c


#include "s3c2440_soc.h"

void delay(volatile int d)
{
	while (d--);
}

int main(void)
{
	int val = 0;  /* val: 0b000, 0b111 */
	int tmp;

	/* 设置GPFCON让GPF4/5/6配置为输出引脚 */
	GPFCON &= ~((3<<8) | (3<<10) | (3<<12));
	GPFCON |=  ((1<<8) | (1<<10) | (1<<12));

	/* 循环点亮 */
	while (1)
	{
		tmp = ~val;
		tmp &= 7;
		GPFDAT &= ~(7<<4);
		GPFDAT |= (tmp<<4);
		delay(100000);
		val++;
		if (val == 8)
			val =0;
		
	}

	return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关标签: JZ2440开发笔记