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


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

    部分注释修改了哦亲
     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、源程序源码注释有点问题哦,此文给的注释已经修改了哦,亲

  • 相关阅读:
    高级算法(1):
    spark浅谈(3):
    linux学习笔记(1):
    数据分析之pandas(1)
    数据分析之期权
    数据分析之蒙特卡洛模拟
    未能加载文件或程序集"xxxxxx"或它的某一个依赖项
    未能映射路径"/"
    部署MVC项目ManagedPipelineHandler报错
    IIS记录
  • 原文地址:https://www.cnblogs.com/kalo1111/p/3065679.html
Copyright © 2020-2023  润新知