|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 cjsb37 于 2013-4-29 09:11 编辑
/*---------------------------------------------------------------------------
文 件 名 : 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(完全增强版)及应用演示包
|
|