直接调用,原子哥关于计算波特率部分的程序:
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(36*1000000)/(dwBaudrate*16); //得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
return mantissa;
但是我仿真之后发现:写进寄存器的部分只有整数部分,无小数部分,不知道原因是什么,因此,我就改用了IAR例程中的,没有问题。下面是我的程序
u32 tmpreg = 0x00;
u32 integerdivider = 0x00;
u32 fractionaldivider = 0x00;
integerdivider = ((0x19 * 36 * 1000000) / (0x04 * (dwBaudrate)));
tmpreg = (integerdivider / 0x64) << 0x04;
fractionaldivider = integerdivider - (0x64 * (tmpreg >> 0x04));
tmpreg |= ((((fractionaldivider * 0x10) + 0x32) / 0x64)) & ((u8)0x0F);
return tmpreg;
有人遇到过我这个问题吗?
【补充】,我又测试了一下,只仿真没有问题,只要下载程序就有问题。我用的IAR5.2,用IAR6.0没有问题。有人知道原因吗?? |