关于hellpsp中第15章程序的错误的部分的改正
时间:10-02
整理:3721RD
点击:
以前大概看过SPI,所以没怎么看课本写的程序,今天看了下程序,特此把程序中错误的地方分享给大家。希望初学者不要被错误的例子左右。
1.
开发板的发光管为共阴极,共阴极的发光管点亮是有顺序的,课本上写的是
1~f是{0x7E,0x29,0x2c,0x66,0xa4,0xa0,0x3e,0x20,0x24,0x22,0xe0,0xb1,0x68,0xa1,0xa3}
实际上这是错误的,应该是
{0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
2.
SpiaRegs.SPICCR.all = 0x08;///进入初始状态,数据在上升沿输出,自测禁止,8位数据模式
这句话其实也是错误的。
首先0x08表示的是上升沿输出,9位数据模式。但是74HC595这个芯片是上升沿输入数据,所以主机应该改成下降沿输出
正确的应该是SpiaRegs.SPICCR.all = 0x47;///进入初始状态,数据在下升沿输出,自测禁止,7位数据模式
3.
SpiaRegs.SPICCR.all = 0x8a; //退出初始状态
这句话也有错误。因为上面已经对这个寄存器别的数据进行了设置,所以执行设置SpiaRegs.SPICCR.bit.RESET=1就可以了,再者,作者也不对,明显的前后的字节控制位都一样长。
4.
因为发送数据缓冲寄存器和数据寄存器都是右对齐方式,高位在最右边。所以要把要传输的数据进行一下改变,可以用<<这个符号右移8位,也可以写成{0xf9xx,0xa4xx,0xb0xx,0x99xx,0x92xx,0x82xx,0xf8xx,0x80xx,0x90xx,0x88xx,0x83xx,0xc6xx,0xa1xx,0x86xx,0x8exx};
之类。其中xx为0~f的任意值。
提醒大家:helldsp这本书作为入手dsp的经典之作,给了初学者很大的帮助,但书中也有部分错误,希望学习时要勤动手,多看些外文资料,不要认为书上都是对的。
有人可能会问为什么错误的程序仿真时能得到正确的结果呢,我想是因为凑巧了吧。不信你把程序烧入dsp中,就会看到结果是错的。
1.
开发板的发光管为共阴极,共阴极的发光管点亮是有顺序的,课本上写的是
1~f是{0x7E,0x29,0x2c,0x66,0xa4,0xa0,0x3e,0x20,0x24,0x22,0xe0,0xb1,0x68,0xa1,0xa3}
实际上这是错误的,应该是
{0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
2.
SpiaRegs.SPICCR.all = 0x08;///进入初始状态,数据在上升沿输出,自测禁止,8位数据模式
这句话其实也是错误的。
首先0x08表示的是上升沿输出,9位数据模式。但是74HC595这个芯片是上升沿输入数据,所以主机应该改成下降沿输出
正确的应该是SpiaRegs.SPICCR.all = 0x47;///进入初始状态,数据在下升沿输出,自测禁止,7位数据模式
3.
SpiaRegs.SPICCR.all = 0x8a; //退出初始状态
这句话也有错误。因为上面已经对这个寄存器别的数据进行了设置,所以执行设置SpiaRegs.SPICCR.bit.RESET=1就可以了,再者,作者也不对,明显的前后的字节控制位都一样长。
4.
因为发送数据缓冲寄存器和数据寄存器都是右对齐方式,高位在最右边。所以要把要传输的数据进行一下改变,可以用<<这个符号右移8位,也可以写成{0xf9xx,0xa4xx,0xb0xx,0x99xx,0x92xx,0x82xx,0xf8xx,0x80xx,0x90xx,0x88xx,0x83xx,0xc6xx,0xa1xx,0x86xx,0x8exx};
之类。其中xx为0~f的任意值。
提醒大家:helldsp这本书作为入手dsp的经典之作,给了初学者很大的帮助,但书中也有部分错误,希望学习时要勤动手,多看些外文资料,不要认为书上都是对的。
有人可能会问为什么错误的程序仿真时能得到正确的结果呢,我想是因为凑巧了吧。不信你把程序烧入dsp中,就会看到结果是错的。