网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> TI DSP代码示例 >> C2000 >> 文章正文
  TMS320LF2407 SPI接口的DA 实验         ★★★ 【字体:
TMS320LF2407 SPI接口的DA 实验
作者:61IC    文章来源:本站原创    点击数:    更新时间:2007-1-17    

//Main.c
//SPI-TLC5620 DA转换程序
#include "global.c"
void SystemInit();
void Timer1Init();
void KickDog(); 
void SPI_Init();
void DA_OUT(unsigned CHANNEL,unsigned int RNG,unsigned int SPI_DATA); 
int numled0=200;  
unsigned int t0=0,i=0;  
int Voltage=0;
main()

   SystemInit();           //系统初始化
   MCRA=MCRA & 0xC0FF;       //IOPB0-6设为IO口模式
   PBDATDIR=0xFFC2;         //所有LED=0
   PBDATDIR=PBDATDIR | 0x003D;  //所有LED=1 
   SPI_Init();     
//   CreateDASigal();
/*   while(1)
   {
   CreateDASigal();
   i=10;  
   for(i=0;i<100;i++);
   }    */
   Timer1Init();           //定时器初始化
   asm(" CLRC INTM ");
   while(1);
  
}


void SystemInit()

 
 asm(" SETC INTM "); //关闭总中断
 asm(" CLRC  SXM  "); //禁止符号位扩展
 asm(" CLRC  CNF  ");    //B0块映射为 on-chip DARAM
 asm(" CLRC  OVM  ");    //累加器结果正常溢出
 SCSR1=0x87FE;          //系统时钟CLKOUT=20*2=40M
          //打开ADC,EVA,EVB,CAN和SCI的时钟
 WDCR=0x006F;   //禁止看门狗,看门狗时钟64分频
 KickDog();       //初始化看门狗 
    IFR=0xFFFF;    //清除中断标志
    IMR=0x0003;    //打开中断2    
   

void Timer1Init()          
{

    EVAIMRA=0x0080;   //  定时器1周期中断使能
    EVAIFRA=0xFFFF;   //  清除中断标志
    GPTCONA=0x0000;
 T1PR=2500;    // 定时器1初值,定时0.4us*2500=1ms    
 T1CNT=0;
 T1CON=0x144E;           //增模式, TPS系数40M/16=2.5M,T1使能
    
}

void SPI_Init()             //SPI-DA初始化
{
    MCRB=MCRB | 0x0014;     //SPISIMO,SPICLK特殊功能方式
    PBDATDIR=PBDATDIR | 0x0002;     //CS_DA=1
    SPICCR=0x004a;          //11bit数据
    SPICTL=0x0006;          //禁止中断
    SPIBRR=0x0027;          //1M波特率,40M/40=1M
    SPICCR=SPICCR | 0x80;  

}

void DA_OUT(unsigned CHANNEL,unsigned int RNG,unsigned int SPI_DATA)

    unsigned char flag=0;
    SPITXBUF=(CHANNEL<<14)|(RNG<<13)|(SPI_DATA<<5) ;      //bit10,9~CHANNEL;bit8~RNG倍数
    while(1)
    {
    flag=SPISTS&0x40;
    if(flag==0x40)     break;
    }
    SPIRXBUF=SPIRXBUF;             //虚读寄存器以清除中断标志    

    PBDATDIR=PBDATDIR & 0xFFFD;  //CS_DA=0,更新模拟信号输出  
    for(i=0;i<5;i++);              //延时
    PBDATDIR=PBDATDIR | 0x0002;     //CS_DA=1,锁存数据  
   
}

void c_int2()                     //定时器1中断服务程序
{

    if(PIVR!=0x27)
  {   asm(" CLRC INTM ");
   return;
  }
 T1CNT=0;
 
 numled0--;
 if(numled0==0)
 {
  numled0=200;
  if((PBDATDIR & 0x0001)==0x0001)
   PBDATDIR=PBDATDIR & 0xFFFE;     //IOPB0=0;LED灭 
  else
   PBDATDIR=PBDATDIR |0x0101;      //IOPB0=1;LED亮
 }
    if(Voltage<0) Voltage=0;
    DA_OUT(0,0,Voltage);                //Voltage范围0-255对应0-3.3V
    DA_OUT(1,0,Voltage);                //Voltage范围0-255对应0-3.3V
    DA_OUT(2,0,192);                  //2.475V,Voltage范围0-255对应0-3.3V
    DA_OUT(3,0,128);                  //1.65V,Voltage范围0-255对应0-3.3V
    if(t0<255)  Voltage++;
      else  Voltage--;
    if(Voltage<0) Voltage=0;
    if(t0==508)     t0=0;
      
    t0++; 
   
 EVAIFRA=0x80;
 asm(" CLRC INTM ");  
 

void KickDog()          //踢除看门狗
{
 WDKEY=0x5555;
 WDKEY=0xAAAA;
}

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    利用MSP430实现Blackfin DSP…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号