老古开发网首页
导航:老古开发网首页文章索引文章分类DSP数字信号处理→[将DSP的C++程序写的和ARM/MCU一样简单明了]
| -文章搜索 - 最新文章 - |

将DSP的C++程序写的和ARM/MCU一样简单明了

发布时间:2006年6月19日 点击次数:888
来源:   作者:
 

//哈哈,真不喜欢DSP的常规写法~~~

/*-----------------------------------------
  DSP菜鸟的第1个定时器实战演示程序
HotPower@126.com

2005.6.12        于西安大雁塔村队部


-----------------------------------------*/
#include <cstdio> //C语言可以用stdio.h
#include <cstring>//C语言可以用string.h
#include "C5402DEF.h"//

volatile bool IOXF;
volatile unsigned int SystemRamTest;

extern "C" interrupt void Timer0Isr();
extern "C" interrupt void Timer1Isr();

class SystemObj {//系统类
public:
  SystemObj(void);
public:
  inline void SystemInit(void);
  inline void PllInit(void);
private:
  unsigned int SystemRamTest;
};

SystemObj::SystemObj(void)
{
  Disable();//关中断
  SREG->IMR = 0x0000;
  SREG->IFR = 0xffff;
//设置0x0080为中断向量表首址,在第2个128页内。
  SREG->PMST = (0x01 << PMST_IPTR) (1 << PMST_MP_MC) (1 << PMST_OVLY);
//  SREG->PMST = (1 << PMST_DROM);//数据可const.
/*---------------------------------------------------------------------------
若:设置0x0100为中断向量表首址,在第3个128页内。
则:*.cmd文件应该改为:
     PAGE 0: VECS: origin=0x0100,  length=0x66
则:
  SREG->PMST = (0x02 << PMST_IPTR) (1 << PMST_MP_MC) (1 << PMST_OVLY);
----------------------------------------------------------------------------*/
  SystemInit();//系统初始化
}

void SystemObj::SystemInit(void)
{
  PllInit();//PLL初始化
  if (::SystemRamTest != 0x55aa) {
    ::SystemRamTest = 0x55aa;
  }
  if (SystemRamTest != 0x55aa) {
    SystemRamTest = 0x55aa;
  }
  IOXF = 0;
}

void SystemObj::PllInit(void)
{
volatile unsigned int start;
  do {
    SREG->CLKMD = 0;
    __nop();
  }
  while(SREG->CLKMD & (1 << CLKMD_PLLSTATUS));
  SREG->CLKMD = (9 << CLKMD_PLLMUL) (30 << CLKMD_PLLCOUNT) (1 << CLKMD_PLLONOFF) (1 << CLKMD_PLLNDIV) (1 << CLKMD_PLLSTATUS);//100M
//  SREG->CLKMD = (14 << CLKMD_PLLMUL) (30 << CLKMD_PLLCOUNT) (1 << CLKMD_PLLONOFF) (1 << CLKMD_PLLNDIV) (1 << CLKMD_PLLSTATUS);//150M
  for (start = 0; start < 10000; start ++);//等待外设上电复位正常结束
}

SystemObj Sys;

int main(void)
{
  DMA->DMSDI = 0;
  DMA->DMPREC = 0;
  TI_BASE_McBSP0->DXR10 = 0x00;
  TI_BASE_McBSP0->SPSA0 = SPCR1;
  TI_BASE_McBSP0->SPSD0 = 0x00;//SPCR1 = 0x00
  McBSP0->DXR10 = 0x00;
  McBSP0->SPSA0 = SPCR1;
  McBSP0->SPSD0 = 0x00;//SPCR1 = 0x00
  SREG->ST1 = (1 << ST1_INTM);//应该用Disable();//关中断!!!否则无效!
  __nop();
  __nop();
  SREG->ST1 &= ~(1 << ST1_INTM);//应该用Enable();//开中断!!!否则无效!
  __nop();
  __nop();
  TIMER0->TCR = (1 << TCR_TSS);//关闭启动定时器0
  SREG->IMR = 0x0000;
  SREG->IFR = 0xffff;
  TIMER0->PRD = 50000;//设置定时周期
  TIMER0->TCR &= ~(1 << TCR_TSS);//启动定时器0
  SREG->IMR = (1 << IMR_TINT0);//允许TINT0中断
  TIMER1->TCR &= ~(1 << TCR_TSS);//启动定时器1
  SREG->IMR = (1 << IMR_TINT1);//允许TINT1中断
  Enable();//开中断
  while(1)
  {
    __nop();
//   SREG->ST1 ^= (1 << ST1_XF);
    __nop();

    if (::IOXF) {
      SREG->ST1 = (1 << ST1_XF);
    }
    else {
      SREG->ST1 &= ~(1 << ST1_XF);
    }
    idle1();
  }
}

interrupt void Timer0Isr() {
static int count = 0;
  count ++;
  if (count >= 4 * 250) {
    count = 0;
    ::IOXF = !::IOXF;//郁闷~~~中断中ST1被保护~~~
  }
//  SREG->ST1 ^= (1 << ST1_XF);//本想在此翻转,无奈被迫移入主程序中
/*
    if (::IOXF) {
      SREG->ST1 = (1 << ST1_XF);
    }
    else {
      SREG->ST1 &= ~(1 << ST1_XF);
    }
*/
//  TIMER0->TCR = (1 << TCR_TSS);//关闭启动定时器0
}

interrupt void Timer1Isr() {//只运行1次
  TIMER1->TCR = (1 << TCR_TSS);//关闭启动定时器1(自毁)
}


欢迎进入老古论坛进行讨论
[DSP数字信号处理] 相关文章:
C5402DEF.H(菜鸟修正版)
简介:
/*------------------------------------------------------- 文 件 名 : C5402DEF.H 创 建 人 : DSP菜鸟 HotPower@126.com 创 建 日 期 : 2006.6.09 11:19 最近修改日期 : 2006.6.16 9:06 创 建 地 点 : 西安大雁塔村队部 版 本&n......

让DSP的书写像种菜一样
TI C54xx DSP 十天速成讲义 <九>
TI C54xx DSP 十天速成讲义 <六>
TI C54xx DSP 十天速成讲义 <三>
TI C54xx DSP 十天速成讲义 <一>
TI C54xx DSP 十天速成讲义 <四>
TI C54xx DSP 十天速成讲义 <二>
TI C54xx DSP 十天速成讲义 <五>
TI C54xx DSP 十天速成讲义 <八>
 
下一个:[DSP数字信号处理]C5402DEF.H(菜鸟完善版)
简介:
/*------------------------------------------------------- 文 件 名 : C5402DEF.H 创 建 人 : DSP菜鸟 HotPower@126.com 创 建 日 期 : 2006.6.09 11:19 最近修改日期 : 2006.6.13 10:56 创 建 地 点 : 西安大雁塔村队部 版 本&......
 

上一个:[DSP数字信号处理]ADI基于闪存的Blackfin处理器适合汽车应用

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:10分钟 执行时间:16毫秒