主题 : 关于myled0321LED 测试程序的学习讨论(启动代码) 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 2459
精华: 0
发帖: 21
金钱: 155 两
威望: 111 点
综合积分: 42 分
注册时间: 2008-11-18
最后登录: 2019-02-17
楼主  发表于: 2009-01-14 10:53

 关于myled0321LED 测试程序的学习讨论(启动代码)

   相信一定有很多人对这部分东西不是很明白 ,我也是仅仅是得到代码可是却看不懂!哎!菜鸟啊。
所以我在这里诚招各路高手来帮忙,给菜鸟们讲解一下代码(注释一下也好),先谢谢了。为得就是让我们菜鸟有个可以学习的带注释的代码!
 
   希望大家 一起讨论 共同进步
附件: myled0321.rar (126 K) 下载次数:61
级别: 新手上路
UID: 2459
精华: 0
发帖: 21
金钱: 155 两
威望: 111 点
综合积分: 42 分
注册时间: 2008-11-18
最后登录: 2019-02-17
1楼  发表于: 2009-01-14 10:54
// *************************************************
// 这是学ARM9和ADS1.2的一个很好的例程,这个例程简单易懂。
// 这个例程可以用开发板是的LED灯和仿真器来测试硬件的好坏,
// 还可以CACHE对程序运行速度的影响,测试设置FCLK的频率。
// LED test
//2004.10.25
//***************************************************
#include "def.h"
#include "option.h"
#include "2440addr.h"     //
#include "2440lib.h"
#include "2440slib.h"     //void MMU_EnableDCache();
//================================


void __rt_lib_init(void);
void dely(U32 tt)
{
   U32 i;
   for(;tt>0;tt--)
   {
     for(i=0;i<10000;i++){}
   }
}
  

int Main(int argc, char **argv)
{
    int i;
    U8 key;
    U32 mpll_val=0;
    
    char *st="LED is OK!\n\0";
    
    #if ADS10  
    __rt_lib_init(); //for ADS 1.0
    #endif
    
    i = 2 ;    //hzh, don't use 100M!
        //boot_params.cpu_clk.val = 3;
    switch ( i ) {
    case 0:    //200
        key = 12;
        mpll_val = (92<<12)|(4<<4)|(1);
        break;
    case 1:    //300
        key = 13;
        mpll_val = (67<<12)|(1<<4)|(1);
        break;
    case 2:    //400
        key = 14;
        mpll_val = (92<<12)|(1<<4)|(1);
        break;
    case 3:    //440!!!
        key = 14;
        mpll_val = (102<<12)|(1<<4)|(1);
        break;
    default:
        key = 14;
        mpll_val = (92<<12)|(1<<4)|(1);
        break;
    }
    
    //init FCLK=400M, so change MPLL first
    ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
    ChangeClockDivider(key, 12);    

//     ChangeClockDivider(1,1);    // 1:2:4    FCLK:HCLK:PCLK
     // rCLKDIVN=0x4;    //  1:4:4
    //ChangeMPllValue(82,2,1);     //FCLK=135.0Mhz    
//   ChangeMPllValue(82,1,1);     //FCLK=180.0Mhz    
    //ChangeMPllValue(161,3,1);    //FCLK=202.8Mhz
    //ChangeMPllValue(117,1,1);    //FCLK=250.0Mhz
    //ChangeMPllValue(122,1,1);    //FCLK=260.0Mhz
    //ChangeMPllValue(125,1,1);    //FCLK=266.0Mhz
    //ChangeMPllValue(127,1,1);    //FCLK=270.0Mhz  
    
    //MMU_EnableICache();
    //MMU_EnableDCache();
    
    MMU_DisableICache();
    MMU_DisableDCache();

    Uart_Init(0,115200);
    Uart_Select(0);
    Uart_SendString("hello,qq2440\n");
    Uart_Printf("hello,qq2440, printf\n");

   rGPBCON = 0x00555555;
   rGPBDAT = 0x0000;
   rGPBDAT = 0x0ffffff;
  
   while(1)
   {
        
     rGPBDAT = 0x0000;
     dely(120);
     rGPBDAT = 0x0ffffff;
     dely(120);
     Uart_SendString(st);
   }
  
   return 0;
}
级别: 侠客
UID: 3972
精华: 0
发帖: 50
金钱: 265 两
威望: 77 点
综合积分: 100 分
注册时间: 2009-02-18
最后登录: 2017-11-16
2楼  发表于: 2009-02-24 13:25
我 也期待高手能解释下就好 了
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2009-02-24 22:56
不要指望别人会好心无偿帮你一行一行解释代码, 先学会提出问题
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 3924
精华: 0
发帖: 22
金钱: 125 两
威望: 49 点
综合积分: 44 分
注册时间: 2009-02-16
最后登录: 2013-06-05
4楼  发表于: 2009-03-02 18:52
看懂代码倒是不难。
只有学过C,基本上没问题吧。
我也刚开始学,看了这个据说最简单的例子,有点不明。
不明之处就是关于函数的定义在哪里。
我在
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
这些头文件里只找到了函数的声明,没发现函数的定义。
级别: 新手上路
UID: 3402
精华: 0
发帖: 9
金钱: 80 两
威望: 72 点
综合积分: 18 分
注册时间: 2009-01-09
最后登录: 2018-10-28
5楼  发表于: 2009-03-04 22:11
顶一下,希望高手技术支援一下。
级别: 新手上路
UID: 6391
精华: 0
发帖: 1
金钱: 10 两
威望: 10 点
综合积分: 2 分
注册时间: 2009-05-30
最后登录: 2009-06-03
6楼  发表于: 2009-06-01 22:07
函数的定义在相应的.c文件中
级别: 新手上路
UID: 6402
精华: 0
发帖: 8
金钱: 70 两
威望: 62 点
综合积分: 16 分
注册时间: 2009-05-31
最后登录: 2012-04-09
7楼  发表于: 2009-06-08 14:16
// *************************************************
// 这是学ARM9和ADS1.2的一个很好的例程,这个例程简单易懂。
// 这个例程可以用开发板是的LED灯和仿真器来测试硬件的好坏,
// 还可以CACHE对程序运行速度的影响,测试设置FCLK的频率。
// LED test
// 因为程序编译后不足4k,因此该程序可以使用supervivi的功
// 能菜单"v"或者"n"直接烧写到nand flash中运行
// 注意: 要烧写到nand flash中运行,必须把RO地址设置为0x0
// 友善之臂 - 2008.08.30
// http://www.arm9.net or http://www.arm123.net
//***************************************************
#include "def.h"
#include "option.h"
#include "2440addr.h"    
#include "2440lib.h"
#include "2440slib.h"      
//================================

void dely(U32 tt)
{
   U32 i;
   for(;tt>0;tt--)
   {
     for(i=0;i<10000;i++){}
   }
}
  

int Main(int argc, char **argv)
{
    int i;
    U8 key;
    U32 mpll_val=0;
    int data;
  
    mpll_val = (92<<12)|(1<<4)|(1);
    
    //init FCLK=400M, so change MPLL first
    ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
    ChangeClockDivider(key, 12);    

    //ChangeClockDivider(1,1);    // 1:2:4    FCLK:HCLK:PCLK
    // rCLKDIVN=0x4;    //  1:4:4
    //ChangeMPllValue(82,2,1);     //FCLK=135.0Mhz    
    //ChangeMPllValue(82,1,1);     //FCLK=180.0Mhz    
    //ChangeMPllValue(161,3,1);    //FCLK=202.8Mhz
    //ChangeMPllValue(117,1,1);    //FCLK=250.0Mhz
    //ChangeMPllValue(122,1,1);    //FCLK=260.0Mhz
    //ChangeMPllValue(125,1,1);    //FCLK=266.0Mhz
    //ChangeMPllValue(127,1,1);    //FCLK=270.0Mhz  
    
    //MMU_EnableICache();
    //MMU_EnableDCache();
    
    MMU_DisableICache();
    MMU_DisableDCache();


    rGPBCON = 0x155555;
  
  
       data = 0x06;
       while(1)
       {
          
           rGPBDAT = (data<<5);
           dely(120);
           data =~data;
    }
  
   return 0;
}
级别: 新手上路
UID: 6402
精华: 0
发帖: 8
金钱: 70 两
威望: 62 点
综合积分: 16 分
注册时间: 2009-05-31
最后登录: 2012-04-09
8楼  发表于: 2009-06-08 14:17
上面这个是友善之臂提供的LED测试程序,我想请问下其中的变量key为什么没有经过赋值就直接传递给函数ChangeClockDivider(key, 12)了呢
级别: 侠客
UID: 4843
精华: 0
发帖: 102
金钱: 810 两
威望: 554 点
综合积分: 204 分
注册时间: 2009-03-31
最后登录: 2012-11-14
9楼  发表于: 2009-06-08 17:25