打印

菜农发布C5402CFG.H/C(结构及结构指针版)及应用演示包

[复制链接]
1087|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2008-12-17 19:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

/*---------------------------------------------------------------------------
文   件   名 :  C5402CFG.H(结构及结构指针版)
创   建   人 :  DSP菜鸟  HotPower@126.com
创 建 日  期 :  2006.6.09  11:19
最近修改日期 :  2008.12.16  16:18 
创 建  地 点 : 西安大雁塔村队部(http://www.hotpower.org/)
版   本   号 : V4.16
修 改 理  由 :  修正和增订内容
    新增结构uVectorEntry以支持废除汇编启动代码(中断向量表),实现
    程序代码全部由C/C++语言编写.
    增加对通用寄存器物理地址的直接访问,达到汇编级的代码速度
    新版本(SREGs结构型,优化)与老版本(SREG结构指针型,方便)高度兼容
备        注 : 由此文件出现的问题,DSP菜鸟不负任何责任
                菜农将不断更新和完善本头文件。
                必须在系统中同时加入C5402CFG.C
升 级 方  法 :  在父亲节版的基础上全面升级为统一结构指针
    只需在旧版C5402DEF.H或C5402CFG.H的结构成员后加.Regs即可
应 用 举  例:
    SREG->ST0 &= ~(1 << ST0_C);
    改为:
    SREG->ST0.Regs &= ~(1 << ST0_C);
    或:
    SREG->ST0.Bits.C = 0;
     
                父亲节版新旧版近似兼容使其更强大:
    SREG->ST1.Bits.XF = true;
    SREG->ST1.Bits.CPL = 1;
    SREG->ST1.Regs = (1 << ST1_XF) | (1 << ST1_CPL);
    TIMER0->TCR.Bits.TSS = 1;//关闭定时器0
    TIMER0->TIM = 62500 - 1;//设置定时计数器
    或:
    SREG->TIMER0.TCR.Bits.TSS = 1;//关闭定时器0
    SREG->TIMER0.TIM = 62500 - 1;//设置定时计数器
                结构的访问使代码更简洁更优化:
    SREGs.ST0.Bits.C = true;
    SREGs.ST1.Bits.XF = true;
    SREGs.ST1.Bits.CPL = 1;
    SREGs.ST1.Regs = (1 << ST1_XF) | (1 << ST1_CPL);
    SREGs.TIMER0.TCR.Bits.TSS = 1;//关闭定时器0
    SREGs.TIMER0.TIM = 62500 - 1;//设置定时计数器
    对McBSP实现结构型位域汇编级代码访问:
    指针型:McBSP1->SPSA = PCR;
            McBSP1->SPSD.PCR_Bits.FSXP= 1;
      McBSP0->DXR1 = 0x1234;
        或:SREG->McBSPADDR1.SPSA = PCR;
            SREG->McBSPADDR1.SPSD.PCR_Bits.FSXP= 1;
      SREG->McBSPDATA0.DXR1 = 0x1234;
                结构型:SREGs.McBSPADDR1.SPSA = PCR;
                        SREGs.McBSPADDR1.SPSD.PCR_Bits.FSXP = 1;
      SREGs.McBSPDATA0.DXR1 = 0x1234;
                
注 意 事  项 :  用SREGs结构要比SREG结构指针代码优化,可达到汇编级.
                但查看变量时由于CCS的问题, SREGs结构查看不到成员,
                可在Watch窗口用SREG结构指针查看SREGs的结构成员.
    用McBSP0/McBSP1结构指针查看McBSP更方便.
声        明 : 雁塔菜农拥有对本文件的最终解释和灌溉权。                
---------------------------------------------------------------------------*/


 
/*---------------------------------------------------------------------------
文   件   名 :  C5402CFG.C(结构及结构指针版)
创   建   人 :  DSP菜鸟  HotPower@126.com
创 建 日  期 :  2006.6.09  11:19
最近修改日期 :  2008.12.16  16:18 
创 建  地 点 : 西安大雁塔村队部(http://www.hotpower.org/)
版   本   号 : V4.16
修 改 理  由 :  修正和增订内容
    新增结构uVectorEntry以支持废除汇编启动代码(中断向量表),实现
    程序代码全部由C/C++语言编写.
    增加对寄存器的直接物理地址的访问,最优化的速度
    新版本(SREGs结构型,优化)与老版本(SREG结构指针型,方便)高度兼

备        注 : 由此文件出现的问题,DSP菜鸟不负任何责任
                菜农将不断更新和完善本头文件。
                必须在系统中同时加入C5402CFG.C
应        用 : 废除汇编的启动代码(中断向量表)
#pragma DATA_SECTION("vectors") 
const uVectorEntry g_pfnVectors[] = {
 ISR_Reset(),   //reset      0x0080 #0//软硬件复位nISR_REST
 ISR_Default(), //nmi        0x0084 #1//非屏蔽中断nISR_NMI
 ISR_Default(), //sint17     0x0088 #2//软件中断17    
 ISR_Default(), //sint18     0x008c #3//软件中断18
 ISR_Default(), //sint19     0x0090 #4//软件中断19
 ISR_Default(), //sint20     0x0094 #5//软件中断20
 ISR_Default(), //sint21     0x0098 #6//软件中断21
 ISR_Default(), //sint22     0x009c #7//软件中断22
 ISR_Default(), //sint23     0x00a0 #8//软件中断23
 ISR_Default(), //sint24     0x00a4 #9//软件中断24
 ISR_Default(), //sint25     0x00a8 #10//软件中断25
 ISR_Default(), //sint26     0x00ac #11//软件中断26
 ISR_Default(), //sint27     0x00b0 #12//软件中断27
 ISR_Default(), //sint28     0x00b4 #13//软件中断28
 ISR_Default(), //sint29     0x00b8 #14//软件中断29
 ISR_Default(), //sint30     0x00bc #15//软件中断30
 ISR(Eint0Isr), //int0       0x00c0 #16//外部中断0
 ISR(Eint1Isr), //int1       0x00c4 #17//外部中断1
 ISR(Eint2Isr), //int2       0x00c8 #18//外部中断2
 ISR(Timer0Isr),//tint       0x00cc #19//定时器中断0
 ISR(McBSPIsr), //rint0      0x00d0 #20//McBSP0接收中断
 ISR_Default(), //xint0      0x00d4 #21//McBSP0发送中断
 ISR_Default(), //rint1      0x00d8 #22//McBSP1接收中断
 ISR(Timer1Isr),//xint1      0x00dc #23//定时器中断1
 ISR(Eint3Isr), //int3       0x00e0 #24//外部中断3
 ISR_Default(), //hpint      0x00e4 #25//HPI中断
 ISR_Default(), //           0x00e8 #26//软件中断10
 ISR_Default(), //           0x00ec #27//软件中断11
 ISR_Default(), //           0x00f0 #28//软件中断12
 ISR_Default(), //           0x00f4 #29//软件中断13
 ISR_Default(), //           0x00f8 #30//保留0
 ISR_Default(), //           0x00fc #31//保留1
};
extern "C" interrupt void DefaultIsr(void)
{
}

注 意 事  项 :  用SREGs结构要比SREG结构指针代码优化,但查看变量时由于CCS的问题
                SREGs结构查看不到成员,但可用SREG结构指针查看.
声        明 : 雁塔菜农拥有对本文件的最终解释和灌溉权。                
---------------------------------------------------------------------------*/

 
应用演示包下载:  (包内自带C5402cfg.h/C5402cfg.c/interrupt.h/cpp能文件)
本版本经过半年多的应用已非常稳定.它支持C/C++工程多文件系统,不象
C5402def.h只支持工程单文件系统
最大改动:
1.废除汇编的启动代码(中断向量表)
新增结构uVectorEntry以支持废除汇编启动代码(中断向量表),实现
    程序代码全部由C/C++语言编写.
2.用SREGs结构要比SREG结构指针代码优化,可达到汇编级访问.
3.增设对McBSP的虚拟地址的位域访问.
4.升级后用旧版本C5402DEF.H编写的软件只需稍加更改即可.
#pragma DATA_SECTION(SREGs, ".registers") 
//结构型,建议使用,可达到汇编级的访问速度和代码优化
TI_SREG SREGs;//定义全局结构变量SREGs(5402通用寄存器)
//结构指针型以后可能将被淘汰,目前只用于仿真时监视SREGs
const TI_PSREG SREG = TI_BASE_SREG;//定义全局结构指针变量SREG
const TI_PMcBSP0 McBSP0 = TI_BASE_McBSP0;//定义全局结构指针变量McBSP0
const TI_PMcBSP1 McBSP1 = TI_BASE_McBSP1;//定义全局结构指针变量McBSP1
const TI_PDMA DMA = TI_BASE_DMA;//定义全局结构指针变量DMA
const TI_PTIMER TIMER0 = TI_BASE_TIMER0;//定义全局结构指针变量TIMER0
const TI_PTIMER TIMER1 = TI_BASE_TIMER1;//定义全局结构指针变量TIMER1
再次声明 : 雁塔菜农拥有对本文件的最终解释和灌溉权。
                          转载和提供下载请注明出处. 不久将会发布HotBios.
多谢多年来大家对"C5402def.h"的厚爱,看到网上有众多网友应用很高兴.
菜农很倒塌地说---本版本TI也很难超越~~~
HotPower@126.com      2008.12.16 与大雁塔菜地
相关链接:http://blog.**/hotpower/189385/message.aspx

相关帖子

沙发
hotpower|  楼主 | 2008-12-17 23:36 | 只看该作者

TI门前发贴~~~俺知道在5402上TI也干不过菜农~~~

使用特权

评论回复
板凳
hq_y| | 2008-12-17 23:37 | 只看该作者

哈哈,强悍

使用特权

评论回复
地板
zahiusr| | 2008-12-18 16:06 | 只看该作者

哈哈,过瘾

使用特权

评论回复
5
hotpower|  楼主 | 2008-12-21 15:59 | 只看该作者

菜农发布C5402CFG.H/C(完全增强版)及应用演示包

/*---------------------------------------------------------------------------
文   件   名 :  C5402CFG.H(完全增强版)
创   建   人 :  DSP菜鸟  HotPower@126.com
创 建 日  期 :  2006.6.09  11:19
最近修改日期 :  2008.12.21  16:18 
创 建  地 点 : 西安大雁塔村队部(http://www.hotpower.org/)
版   本   号 : V4.19
修 改 理  由 :  修正和增订内容
    查看变量时由于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菜鸟  HotPower@126.com
创 建 日  期 :  2006.6.09  11:19
最近修改日期 :  2008.12.21  16:18 
创 建  地 点 : 西安大雁塔村队部(http://www.hotpower.org/)
版   本   号 : V4.19
修 改 理  由 :  修正和增订内容
    支持对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数组指针,只是为兼容而保留.
声        明 : 雁塔菜农拥有对本文件的最终解释和灌溉权。                
---------------------------------------------------------------------------*/

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

使用特权

评论回复
6
我是学生| | 2008-12-23 17:11 | 只看该作者

真厉害

使用特权

评论回复
7
田宏亮| | 2009-1-12 14:04 | 只看该作者

有必要吗?

新增结构uVectorEntry以支持废除汇编启动代码(中断向量表),实现
程序代码全部由C/C++语言编写.
增加对通用寄存器物理地址的直接访问,达到汇编级的代码速度

有必要吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1543

主题

21704

帖子

506

粉丝