电子大神的日记本,供应链专家的功夫茶盘,在这里记录、分享与共鸣。

登录以开始

C5402CFG.H(完全增强版)及应用演示包

http://space.ednchina.com/Upload/2008/12/21/dd089373-be9c-4ddd-a7fc-df64630901d1.rar" target=_blank>/*---------------------------------------------------------------------------
文   件   名 :  C5402CFG.H(完全版)
创   建   人 :  DSP菜鸟 
创 建 日  期 :  2006.6.09  11:19
最近修改日期 :  2008.12.20  16:18
创 建  地 点 : 西安大雁塔村队部()
版   本   号 : V4.18
修 改 理  由 :  修正和增订内容
    查看变量时由于CMD的配置问题, SREGs结构查看不到成员
    CMD的正确配置:
       PAGE 1:
    支持对SREGs在watch窗口中有效查看
          MMRS   (RWIX) : o="000000h" l="000060h"
    .registers  : > MMRS   PAGE 1
    支持对中断向量表的动态装载及改写,
    VECT   (RWIX) : o="000080h" l="000080h"
    .vectors    : > VECT   PAGE 1

支持动态加载和卸载中断服务程序
    const uVectorEntry g_pfnVectors[] = {...}
    改为:
    uVectorEntry g_pfnVectors[] = {...}

ISR_Load(nISR_TIMER0, Timer0Isr);//动态装载Timer0Isr()
    ISR_UnLoad(nISR_TIMER0);//动态卸载Timer0Isr()

支持在中断中对堆栈SP指针的访问,并可跳过保护直接操作XF管脚
    中断外非保护ST1的写法:SREGs.ST1.Regs ^= (1 << ST1_XF);
    中断内受保护ST1的2种写法:(注意SREGs.SP.Ptr[X]与压栈个数有关)
    方法1:(分配临时指针变量, 间接修改堆栈内ST1保护寄存器,代码
            简洁,但SREGs.SP.Ptr[X]与优化设置有关)
    TI_PREG regST1 = SREGs.SP.Ptr;//不优化时占用堆栈1个单元
    regST1[X] ^= (1 << ST1_XF);//优化时X=1 不优化时X=2
    方法2:(直接修改堆栈内ST1保护寄存器,与优化设置无关)
    SREGs.SP.Ptr[1] ^= (1 << ST1_XF);//Led工作灯半秒翻转1次

备        注 : 由此文件出现的问题,DSP菜鸟不负任何责任
                本版本移植了HotBios的一些精华,虽不完全但很实用可与汇编比拼。

程序代码全部由C/C++语言编写.
                菜农将不断更新和完善本头文件。
应 用 举  例:
    增加对DMA复用中断的位域定义
    SREGs.DMA.DMPREC.Bits.INTOSEL = DMPREC_INTOSEL_CH1_TO_CH3;
    SREGs.IMR.DMA_Bits.DMAC1 = 1;
    ISR_Load(nISR_DMAC1INT, DMAIsr);//动态装载DMAIsr()
    ISR_UnLoad(nISR_DMAC1INT);//动态卸载DMAIsr()
注 意 事  项 :  从本版本起可正式淘汰SREG数组指针,只是为兼容而保留.
声        明 : 雁塔菜农拥有对本文件的最终解释和灌溉权。               
---------------------------------------------------------------------------*/

/*---------------------------------------------------------------------------
文   件   名 :  C5402CFG.C(完全版)
创   建   人 :  DSP菜鸟 
创 建 日  期 :  2006.6.09  11:19
最近修改日期 :  2008.12.20  16:18
创 建  地 点 : 西安大雁塔村队部()
版   本   号 : V4.18
修 改 理  由 :  修正和增订内容
    支持对SREGs在watch窗口中有效查看
    支持动态装载和卸载中断向量表
    ISR_Load(nISR_TIMER0, Timer0Isr);//动态装载Timer0Isr()
    ISR_UnLoad(nISR_TIMER0);//动态卸载Timer0Isr()
    支持在中断中对堆栈SP指针的访问,并可跳过保护直接操作XF管脚
    SREGs.SP.Ptr[1] ^= (1 << ST1_XF);//Led工作灯半秒翻转1次

程序代码全部由C/C++语言编写.

备        注 : 由此文件出现的问题,DSP菜鸟不负任何责任
                菜农将不断更新和完善本头文件。
应        用 :
extern "C" interrupt void Timer0Isr(void)
{//每10mS中断1次
static unsigned int Count = 0;
 Count ++;
 if (Count > 50)//16*62500*50=0.5S
 {//main()中的SREGs.ST1.Regs ^= (1 << ST1_XF);可用下列语句替代
     //方法1:(用暂存器代码更简洁)
  //TI_PREG regST1 = SREGs.SP.Ptr;
  //regST1[1] ^= (1 << ST1_XF);//Led工作灯半秒翻转1次
0000:06F5 7211      MVDM  18h,AR1
0000:06F7 F495      NOP  
0000:06F8 6AE1      XORM  2000h,*AR1(1)
     //方法2:
  SREGs.SP.Ptr[1] ^= (1 << ST1_XF);//Led工作灯半秒翻转1次 
0000:06F5 10F8      LD    *(SP),A
0000:06F7 F000      ADD   #1h,0,A,A
0000:06F9 8811      STLM  A,AR1
0000:06FA F495      NOP  
0000:06FB F495      NOP  
0000:06FC 6A81      XORM  2000h,*AR1
  Count = 0;
  System.Flag.Bits.Timer0 = true;//通知main()定时0.5S时间到
 }
    //SREGs.IFR.Bits.TINT0 = 1;//清除定时器0中断标志
}
注 意 事  项 :  从本版本起可正式淘汰SREG数组指针,只是为兼容而保留.
声        明 : 雁塔菜农拥有对本文件的最终解释和灌溉权。               
---------------------------------------------------------------------------*/

应用演示包(增强版)下载:

博主
hotpower@126.com
HotPower的文潭
欢迎参加新唐Cortex-M0巡回研讨会