本帖最后由 碧水长天 于 2009-8-6 10:05 编辑
最近在用dsPIC30F4011这颗片子,遇到了3个问题:
开发环境:MPLAB V8.33+C30学生版+ICD2
问题1:除法指令的使用
在C程序中,一条这样的指令:16位无符号=32位无符号/16位无符号,发现运行很耗时,查看汇编代码,发现没有编译成DIV.UD指令,而是recall 0x000180来处理,同样32位有符号除以16位有符号运算时,会调用0x0001a0的代码来处理。请问,如何才能避免编译器这样做?
问题2:LVD(低电压检测)的问题
LVD初始化代码,我按照手册书写如下:
static void vInitLvd(void)
{
RCONbits.LVDL = LVD_4D6V; //LVD_4D6V为自己的宏定义;
IEC2bits.LVDIE = 0;
RCONbits.LVDEN = 1;
IFS2bits.LVDIF = 0;
while (RCONbits.BGST == 0); // 此句取消不影响本问题结果
IEC2bits.LVDIE = 1;
}
系统打开了欠压复位,欠压复位设置为2.7V或者4.2V。仿真或者程序下载独立运行时,降低电压到阀值电压点以下,系统均无法进入LVD的中断(中断ISR设置无误,并且有LED监控和eeprom操作),请问问题可能出在哪里?
问题3:如何打开dsPIC30F4011的FRC PLL 16X?
我使用内部振荡器,在器件配置中设置为FRC W/PLL 16X,查看F80000的内容也为0xFDF3了,但是程序运行时,仍然按7.3827Mhz运行,无法倍频到16,试过其他低的倍频数也不行;尝试用_FOSC指令来设置也不行,请教是何故?
请了解的站友指点,不胜感激! |