现在的位置: 首页 > 综合 > 正文

(2)第一个实验,测试ram

2012年12月02日 ⁄ 综合 ⁄ 共 1732字 ⁄ 字号 评论关闭

先看一下第一个实验的整个程序源码·

部分注释修改了哦亲

 1 /*外部数据RAM测试程序*/
 2 #include "global.c" 
 3 void SystemInit();
 4 void RAM_Test();
 5 void KickDog();
 6 
 7 main()
 8 {  
 9 
10    SystemInit();                  /*系统初始化*/
11    
12    MCRA=MCRA & 0xC0FF;             //IOPB0-6设为IO口模式
13    PBDATDIR=0xFFC2;               //所有LED=0 
14    PBDATDIR=PBDATDIR |0x003C;      //pb0口所接的led灭了哦,然后下面就是4秒,
15                 //源程序可没有进入while循环哦,除非把“!=”
16                 //变为“=” 
17 
18    RAM_Test();
19    
20    while(1); 
21    
22 }
23 
24 void SystemInit() 
25 {  
26  
27     asm(" SETC    INTM ");    /* 关闭总中断 */
28     asm(" CLRC  SXM  ");    /* 禁止符号位扩展 */ 
29     asm(" CLRC  CNF  ");    /* B0块映射为 on-chip DARAM*/
30     asm(" CLRC  OVM  ");    /* 累加器结果正常溢出*/
31     SCSR1=0x83FE;             /* 系统时钟CLKOUT=20*2=40M */
32                              /* 打开ADC,EVA,EVB,CAN和SCI的时钟,系统时钟CLKOUT=40M */
33     WDCR=0x006F;            /* 禁止看门狗,看门狗时钟64分频 */ 
34     KickDog();                /* 初始化看门狗 */  
35     IFR=0xFFFF;                /* 清除中断标志 */
36     IMR=0x0000;                /* 打开中断2*/      
37     
38 }  
39 
40 void RAM_Test()
41 {
42   
43     unsigned int i=0,j=0,t=0;  
44     unsigned int *addr=(unsigned int *)0x8000;
45  
46      for(i=0x7FFF;i<0xFFFF;i++)  
47     {  
48               
49        *addr=0x5555;
50        while((*addr)!=0x5555)
51         {  
52           if((t%1000)==0)     
53              {
54                 if((PBDATDIR& 0x0001)==0x0001) 
55                     PBDATDIR=PBDATDIR & 0xFFFE;    //IOPB0=0;LED灭  
56                 else
57                     PBDATDIR=PBDATDIR |0x0101;     //IOPB0=1;LED亮  
58             } 
59           t++; 
60         }  
61        addr++;    
62        for(j=0;j<50;j++);
63        
64     }
65       
66     PBDATDIR=PBDATDIR |0x0101;     //IOPB0=1;LED亮 
67 
68 }
69 
70 void KickDog()                /*踢除看门狗 */
71 {
72     WDKEY=0x5555;
73     WDKEY=0xAAAA;
74 }

 

注解:1、unsigned int *addr=(unsigned int *)0x8000; 为把地址“0x8000” )存入无符号整型指针变量addr。

   2、*addr=0x5555; 为向此地址写入值“0x5555”

   3、

 1  while((*addr)!=0x5555)
 2   {  
 3    if((t%1000)==0)     //修改数值,在掉入次循环时候,调节PB0对应led灯闪烁的频率
 4         {
 5      if((PBDATDIR& 0x0001)==0x0001) 
 6          PBDATDIR=PBDATDIR & 0xFFFE;    //IOPB0=0; 控制LED灭  
 7      else
 8        PBDATDIR=PBDATDIR |0x0101;     //IOPB0=1;LED亮  
 9        } 
10           t++; 
11    }  

如上这段程序是一个开关,即,如果成功把值“0x5555”写入ram,则掉入while循环(当然了,把源程序中的“!=”改为“=”才能打开开关)。
  4、源程序是pb0所接的led灯初始灭 的,然后4秒后又亮了,这里的4秒是软件延时。一般一条c语句的for循环是8个机器周期,lf2407时钟频率是40MHz,即

其时钟周期为25ns,剩下自己算吧。还有一种方法,就是用ccs软件,的profiler功能里面能测量某段程序的执行时间。具体用法参考如下

点我点我点我CCS调试及代码运行时间统计和这个CCS查看DSP程序运行时间

 

5、源程序源码注释有点问题哦,此文给的注释已经修改了哦,亲

抱歉!评论已关闭.