微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > 关于DSP2812SPI的初始化

关于DSP2812SPI的初始化

时间:10-02 整理:3721RD 点击:
SpiaRegs.SPICCR.all = 0x07;///进入初始状态,数据在上升沿输出,自测禁止,8位数据模式
/*操作控制寄存器设置*/
SpiaRegs.SPICTL.all = 0x06;///正常的SPI时钟方式,主动模式,使能发送,禁止中断
/*波特率的设置*/
SpiaRegs.SPIBRR = 0x1D;//波特率 = LSPCLK/(SPIBRR+1)= 30/30 = 1M
SpiaRegs.SPICCR.all = 0x8a; //退出初始状态


SPICCR的配置控制寄存器:
SpiaRegs.SPICCR.bit.RESET = 0; //初始化SPI操作标志到复位状态
SpiaRegs.SPICCR.bit.CLKPOLARITY = 0; //设置上升沿输出数据,下降沿输入数据
SpiaRegs.SPICCR.bit.SPILBK = 0; //禁止SPI回送模式
SpiaRegs.SPICCR.bit.SPICHAR = 7; //一次移入或移出8个字符
SPICTL的操作控制寄存器:
SpiaRegs.SPICTL.bit.OVERRUN = 0; //禁止溢出中断
SpiaRegs.SPICTL.bit.CLK_PHASE = 0; //不延时相位
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; //设置为主机
SpiaRegs.SPICTL.bit.TALK = 1; //使能主机/从机发送使能位
SpiaRegs.SPICTL.bit.SPIINTENA = 0; //不使能SPI中断位
SpiaRegs.SPIBRR = 0x1D; //设置波特率=LSPCLK/(SPIBRR+1)=30MHz/30=1MHz

SpiaRegs.SPICCR.bit.RESET = 1; //SPI准备或接受下一个字符
SpiaRegs.SPICCR.bit.SPICHAR = 10; //一次移入或移出11个字符?
问一、在板子上调试的时候发现只有发送SpiaRegs.SPICCR.bit.SPICHAR = 10; 即发送字符长度为11位的时候代码才能得到正确的结果,但数码管所需要得到的数据只有8位啊。

问二、板子上数码管使用的是74HC595D芯片,芯片的datesheet上写的是在时钟上升沿输入串行数据,从低位开始 在时钟下降沿输出串行数据。
当我改成SpiaRegs.SPICCR.bit.CLKPOLARITY = 1; //设置下降沿输出数据,上升沿输入数据
得到的结果也不对
只有SpiaRegs.SPICCR.bit.CLKPOLARITY = 0; //设置上升沿输出数据,下降沿输入数据

才得到正确的结果

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top