以AD寄存器的文件结构,说明AD寄存器的命名,分配地址空间以及调用和使用。
1.在DSP28_Adc.h中定义一个ADC_REGS类型的寄存器AdcRegs。
ADC_REGS是一个结构体类型,这个结构体类型如structADC_REGS所义。
Union是一种声明共用体的的关键字,即ADCTRL1是一unionADCTR1_REG类型。
unionADCTR1_REG的定义如下,Uint16的一个16位整形和结构体ADCTRL1_BITS共用一个内存空间,也就是说这16位内存空间既可以按照DCTRL1_BITS中定义的位域进行寻址操作,也可以按照Uint16定义的16位进行整体寻址操作。
然后在定义了一种ADC_REGS结构体,该结构体包含所有定义的寄存器。externvolatilestruct ADC_REGSAdcRegs,定义一种可硬件改变的ADC_REGS类型的结构体变量AdcRegs,用extern将其修饰为全局变量,可以被其他文件所引用。
定义一种
structADCTRL1_BITS{     //bits description
   Uint16   rsvd1:4;    //3:0   reserved
     ……
};
   unionADCTRL1_REG{
   Uint16            all;
   structADCTRL1_BITS   bit;
};
structADC_REGS{
    unionADCTRL1_REGADCTRL1;      //ADCControl1
    ……
    ……
};
externvolatilestructADC_REGSAdcRegs;
2.在文件DSP28_Device.h中将所有的寄存器头文件包含在内
如:
       #include"DSP28_Gpio.h"    // 通用I/O模块寄存器
       #include"DSP28_Adc.h"    //ADC 寄存器
       ……
       ……
3.在文件DSP28_GlobalVariableDefs.c中,首先包含#include"DSP28_Device.h",这样DSP28_GlobalVariableDefs.c就可以使用所有定义好的寄存器。
这个文件的作用是将AdcRegs用汇编语言给其分配段AdcRegsFile,就是将AdcRegs写入内存中的段AdcRegsFile。
#pragmaDATA_SECTION(AdcRegs,"AdcRegsFile");
volatilestructADC_REGSAdcRegs;
4.SRAM.cmd主要是分配内存,定义
   MEMORY
   {
   PAGE1:
   GPIODAT   :origin=0x0070E0,length=0x000020
   ADC       :origin=0x007100,length=0x000020
   }
首先分配一个名为ADC的段,起始地址为0x007100,长度为0x000020。
Section{
AdcRegsFile        :>ADC,     PAGE=1
}
这段的作用是将#pragmaDATA_SECTION(AdcRegs,"AdcRegsFile");
产生的AdcRegsFile写入在内存中分配的段ADC 这样就将相应的寄存器和DSP
中对应的外设帧一一映射起来。
5.文件名:DSP28_Adc.c中,首先包含#include "DSP28_Device.h",这样就可以使用所有的寄存器。
    voidInitAdc(void)
    {
      AdcRegs.ADCTRL1.bit.RESET=1;  //ADC软件复位          
      AdcRegs.ADCTRL1.all=0x4f00;   //ADC控制寄存器初始化ADC
软件复位,
    }
在这个文件中,定义关于ADC的函数。
6.在文件DSP28_GlobalPrototypes.h中,将所有的.c文件中定义的函数变为全局函数,这样,如要引用函数,只要在DSP28_GlobalPrototypes.h添加extern 函数。
如:
externvoidInitAdc(void);
然后在需要引用此函数的文件中加入DSP28_GlobalPrototypes.h,这样就可以引用所有的函数。
7.如主函数中,
 #include"DSP28_Device.h"
 // 包含此头文件,即包含了所有.h文件,如ADC.h,这样就可以调用任何寄存器。
 #include"DSP28_Globalprototypes.h"
 // 包含此头文件,即可以调用所有加入DSP28_GlobalPrototypes.h中x.c中的函数。
 #include"DSP28_GlobalVariable.h"
 // 里面没有内容,留给用户自己所有的全局变量。