使用keil SDK方式点亮mini2440的led灯

最近在使用mini2440做开发,网上很多教程和实际操作不太一致,导致入门花费时间长。经过整理,目前mini2440点亮led灯方法有,keil mdk,linux环境编译,使用minitools下载即可。

mini2440分为nor flash和nand flash两种,一般小于4k程序可以直接运行,大于4K的程序需要预先加载引导程序,从存储位置拷贝至内存中。下面来说说mini2440究竟是如何点亮led灯的。

方法一:使用keil mdk的方式,首先下载MDK,使keil包含s3c2440这款芯片。根据该芯片创建工程,添加S3C2440.S文件。工程创建完成后,编写led.c文件代码如下

#define      rGPBCON     (*(volatile unsigned long *)0x56000010)
#define      rGPBDAT    (*(volatile unsigned long *)0x56000014)
#define      rGPBUP     (*(volatile unsigned long *)0x56000018)

#define GPB5_IN ~(3<<10)
#define GPB6_IN ~(3<<12)
#define GPB7_IN ~(3<<14)
#define GPB8_IN ~(3<<16)

#define GPB5_OUT (1<<10)
#define GPB6_OUT (1<<12)
#define GPB7_OUT (1<<14)
#define GPB8_OUT (1<<16)

#define LED1_ON ~(1<<5)
#define LED2_ON ~(1<<6)
#define LED3_ON ~(1<<7)
#define LED4_ON ~(1<<8)

#define LED1_OFF (1<<5)
#define LED2_OFF (1<<6)
#define LED3_OFF (1<<7)
#define LED4_OFF (1<<8)

void Led_Port_Init(void);
void Delay(int tt);

void main()
{
Led_Port_Init();

rGPBDAT |= (LED1_OFF|LED2_OFF|LED3_OFF|LED4_OFF);
rGPBDAT |= (LED1_OFF|LED2_OFF|LED3_OFF|LED4_OFF);

while(1)
{
    rGPBDAT = rGPBDAT&(LED1_ON);
    Delay(10);
    rGPBDAT = rGPBDAT|((LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF));
    Delay(10);
    rGPBDAT = rGPBDAT&(LED2_ON);
    Delay(10);
    rGPBDAT = rGPBDAT|((LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF));
    Delay(10);

    rGPBDAT = rGPBDAT&(LED3_ON);
    Delay(10);
    rGPBDAT = rGPBDAT|((LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF));
    Delay(10);

    rGPBDAT = rGPBDAT&(LED4_ON);
    Delay(10);
    rGPBDAT = rGPBDAT|((LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF));
    Delay(10);
    }
}

void Led_Port_Init(void)
{
rGPBCON &= ~((3<<10)|(3<<12)|(3<<14)|(3<<16));
rGPBCON |= (1<<10)|(1<<12)|(1<<14)|(1<<16);
}

void Delay(int tt)
{
int a,b;
for(a=0;a<=tt;a++)
for(b=0;b<=10000;b++);
}

完成编辑后进入到关键环节,就是配置界面要选择好。(需说明的是Keil MDK 支持Nor Flash下载和仿真状态,nand flash目前没找到下载方法)

                  图1 程序配置

目标界面设置如改图1所示,从配置界面可以看出,程序将拷贝至ROM空间,空间大小为2M。芯片上电运行将程序拷贝至RAM地址空间0x30000000处大小为2M开始运行。

              图2  烧写驱动选择J-LINK / J-TRACE ARM

                图3 配置Jlink的flash烧写函数

如图2、3所示,配置目标芯片的烧写函数,选择应用的nor flash芯片。Use Target Driver勾选,取消Use debug driver和Upadate Target选项勾选。

                图3 使目标编译程序产生bin文件

              图4 勾选产生HEX File

其他界面如图3、图4所示。

                     图5 设置Ext_RAM.ini

设置完成后,编译程序,点击Load下载目标程序。下载目标前注意图5Ext_RAM.ini中的设置。函数设置如下:

/******************************************************************************/
/* Ext_RAM.INI: External RAM (SDRAM) Initialization File                      */
/******************************************************************************/
// <<< Use Configuration Wizard in Context Menu >>>                           //
/******************************************************************************/
/* This file is part of the uVision/ARM development tools.                    */
/* Copyright (c) 2005-2008 Keil Software. All rights reserved.                */
/* This software may only be used under the terms of a valid, current,        */
/* end user licence from KEIL for a compatible version of KEIL software       */
/* development tools. Nothing else gives you the right to use this software.  */
/******************************************************************************/

0x200000

FUNC void Init (void) {

  _WDWORD(0x4A000008, 0xFFFFFFFF);      // Disable All Interrupts

  _WDWORD(0x53000000, 0x00000000);      // Disable Watchdog Timer

                                        // Clock Setup
                                        // FCLK = 300 MHz, HCLK = 100 MHz, PCLK = 50 MHz
  _WDWORD(0x4C000000, 0x0FFF0FFF);      // LOCKTIME
  _WDWORD(0x4C000014, 0x0000000F);      // CLKDIVN
  _WDWORD(0x4C000004, 0x00043011);      // MPLLCON
  _WDWORD(0x4C000008, 0x00038021);      // UPLLCON
  _WDWORD(0x4C00000C, 0x001FFFF0);      // CLKCON

                                        // Memory Controller Setup for SDRAM
  _WDWORD(0x48000000, 0x22000000);      // BWSCON
  _WDWORD(0x4800001C, 0x00018005);      // BANKCON6
  _WDWORD(0x48000020, 0x00018005);      // BANKCON7
  _WDWORD(0x48000024, 0x008404F3);      // REFRESH
  _WDWORD(0x48000028, 0x00000032);      // BANKSIZE
  _WDWORD(0x4800002C, 0x00000020);      // MRSRB6
  _WDWORD(0x48000030, 0x00000020);      // MRSRB7

  _WDWORD(0x56000000, 0x000003FF);      // GPACON: Enable Address lines for SDRAM
}

// Reset chip with watchdog, because nRST line is routed on hardware in a way
// that it can not be pulled low with ULINK

_WDWORD(0x40000000, 0xEAFFFFFE);        // Load RAM addr 0 with branch to itself
CPSR = 0x000000D3;                      // Disable interrupts
//CPSR = 0x00000063;                      // Disable interrupts
PC   = 0x40000000;                      // Position PC to start of RAM
_WDWORD(0x53000000, 0x00000021);        // Enable Watchdog
g, 0                                    // Wait for Watchdog to reset chip

Init();                                 // Initialize memory
LOAD obj\led.axf INCREMENTAL         // Download program
PC = 0x30000000;                       // Setup for Running

g, main                                 // Goto Main

注意修改该行代码与当前工程生成文件名一致,LOAD obj\led.axf INCREMENTAL         // Download program

原文地址:https://www.cnblogs.com/luxingsh/p/11965082.html

时间: 2024-08-02 10:04:23

使用keil SDK方式点亮mini2440的led灯的相关文章

2016.12.12 点亮第一个LED灯

一.keil编译程标准流程 注意事项: 1.建立的 工程 和 .c文件 文件名一样. 二.LED模块图 三.点亮第一个LED灯代码:    

[MSP430DriverLib-1]使用库开发并点亮第一个LED灯

???? MSP430DriverLib库下载地址:http://www.ti.com/tool/MSPDRIVERLIB ???? 下载后进入driverlib文件夹,选择对应的型号,这里我选择的是MSP430F5xx_6xx,进入后将里面的文件都复制到你的msp430工程目录下即可.这里我将要复制的文件都放在DriverLib文件夹里. ???? 这里我用的是TI的MSP430F5529 LaunchPad Evaluation Kit的板子.首先我们来点亮第一个LED,以下为源代码: #i

nodejs和树莓派开发以及点亮RGB的LED灯代码

前段时间集团举行前端IOT比赛,借此机会熟悉了树莓派相关的东西,特此记录一些相关的文档和开发指南. 先介绍一些树莓派的入门教程 阮一峰的树莓派入门 微雪电子-树莓派硬件中文官网 ssh链接树莓派 ssh [email protected](ip)密码:raspberry 设置显示设备 推荐选购3.5吋或者5吋的HDMI显示设备,我第一次买的3.2吋的串口显示器,占用了我20个串口的针脚. 设备链接见这里 使用3.5吋显示器 cd /boot/LCD-show/./LCD35-show使用HDMI

第8课 点亮第一个LED灯

8.1 点亮LED 硬件连接图, 由硬件图可知,当175引脚GPIO[0]输出为0时,LED点亮,当GPIO[0]输出为1时,LED就熄灭,GPIO寄存器的基地址为0x8000d000,下图为用到的几个寄存器的偏移地址 首先,选中GPIO引脚, *((unsigned short *)(0x8000d000+0x00)) = 0x5555; *((unsigned short *)(0x8000d000+0x04)) = 0x5555; 然后,GPIO[0]作为输出,其余的引脚置为输入. *((

BlinkLED 点亮第一个LED灯(C#)

界面: <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBox Name="infoText" Text="Ready" FontSize="50" HorizontalAlignment="Center" VerticalAlignment="Center&q

BlinkLED 点亮第一个LED灯

import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(25,GPIO.OUT) while True: GPIO.output(25,GPIO.HIGH) time.sleep(0.5) GPIO.output(25,GPIO.LOW) time.sleep(0.5)

GPIO接口及点亮第一个LED灯

一.GIPIO介绍 General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C.SMBus或SPI接口简化了I/O口的扩展.当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能. 1.GPIO的优点 低功耗:GPIO具有更低的功率损耗(大约1μA,μC的工作电流则为100μA). 集成IIC从机接口:GPIO内置IIC从机接口,即使在待机模式下也能够全速工作.

74HC595点亮8个LED灯

一.原理介绍 595有两个寄存器,都是8位的,如下所示: 595是串入并出带有锁存功能移位寄存器,它的使用方法简单: - -  在正常使用时 /SCLR接高电平,/G接低电平. - -  从SER每输入一位数据,串行输入时钟SCK上升沿有效一次,直到八位数据输入完毕 - - 输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端. 不同的595引脚名称会不一样,但是功能是一样的.大家看引脚序号即可.以下是595引脚图: 595具体使用的步骤:第一步:目的:将要准备输入的位数据移入74HC595

定时器的应用---查询方式---让8个LED灯,左右各4个来回亮

定时器的应用,查询方式.让8个LED灯,左右各4个来回亮 代码: /********************** 查询方式是主程序不断的查询是否中断,而不需要准备子程序 ***********************/ #include<reg51.h> #define LED P1 #define COUNT 50000 // 50000 * 1us = 0.05s 50000计数次 #define TH_M1 (65536-COUNT)%256 //MODE 1 余数赋值给高4位 #dee