430SPI用SMCLK时钟驱动问题

2019-03-24 10:27发布

本帖最后由 曾经in 于 2015-2-11 15:19 编辑

用430的SPI例程修改驱动SPI彩屏,但是刷屏实在太慢了
例程序用LFXTCLK做时钟源ACLK驱动SPI,我试着改成HFXTCLK做时钟源SMCLK驱动
但是没成功,程序卡在等待发送那里,逻辑分析仪显示一个字节都没发出来,好像时钟没给上
改了好久,还是没找到那里出问题,例程也有些不明白的地方,请大家帮忙看看
用的是FR5969 LaunchPad,自己焊了22.1184M晶振22P电容
430SPI例程:
    GPIO_setAsPeripheralModuleFunctionInputPin(
        GPIO_PORT_PJ,GPIO_PIN4 + GPIO_PIN5,GPIO_PRIMARY_MODULE_FUNCTION);   //首先时钟引脚初始化
    CS_setExternalClockSource(32768,0);             //这里貌似是为之后设置时钟有关的宏观变量
    //Set DCO frequency to max DCO setting
    CS_setDCOFreq(CS_DCORSEL_0,CS_DCOFSEL_3);   //DCO为4M.问题1:这里为什么要设置DCO时钟
    //Select XT1 as the clock source for ACLK with no frequency divider
    CS_clockSignalInit(CS_ACLK,CS_LFXTCLK_SELECT,CS_CLOCK_DIVIDER_1);   //LFXTCLK做ACLK时钟源
    //Start XT1 with no time out
    CS_LFXTStart(CS_LFXTDRIVE_0);   //驱动LFXTCLK晶振,
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2,
        GPIO_PIN2,
        GPIO_SECONDARY_MODULE_FUNCTION
        );
    GPIO_setAsPeripheralModuleFunctionInputPin(
        GPIO_PORT_P1,
        GPIO_PIN6 + GPIO_PIN7,
        GPIO_SECONDARY_MODULE_FUNCTION
        );

    PMM_unlockLPM5();

    //Initialize Master
    EUSCI_B_SPI_initMasterParam param = {0};
    param.selectClockSource = EUSCI_B_SPI_CLOCKSOURCE_ACLK;//用ACLK作SPI时钟
    param.clockSourceFrequency = CS_getACLK();//问题2,没弄明白这里做什么用API手册里就一句话Is the frequency of the selected clock source.
    param.desiredSpiClock = 500000;//这里是设置SPI时钟频率??API手册里说Is the desired clock rate for SPI communication.
    param.msbFirst = EUSCI_B_SPI_MSB_FIRST;//下面都理解spi的常规设置
    param.clockPhase = EUSCI_B_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT;
    param.clockPolarity = EUSCI_B_SPI_CLOCKPOLARITY_INACTIVITY_HIGH;
    param.spiMode = EUSCI_B_SPI_3PIN;
    EUSCI_B_SPI_initMaster(EUSCI_B0_BASE,  ¶m);



以下是修改的程序
QQ截图20150211104808.png
]RX)RP}$GI)SB$I7$L22{{2.png
QQ截图20150211142550.png
QQ截图20150211151614.png






此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
wgsxsm
1楼-- · 2019-03-24 12:39
 精彩回答 2  元偷偷看……
曾经in
2楼-- · 2019-03-24 17:28
< :TI_MSP430_内容页_SA7 --> 本帖最后由 曾经in 于 2015-2-11 16:12 编辑
wgsxsm 发表于 2015-2-11 15:40
不知楼主是否之前用过TI的MCU
你那个22M晶振应该是焊在了高速晶振那里,如果你要使用它,就把DCO的语句给替换掉
但,看你程序,你好像在设置低速晶振那里,写了你高速晶振的参数.这里肯定不行.

我的理解答案
问题1:板载未焊接HF晶振,所以使用DCO
问题2:字面意思,理解为取ACK时钟源的时钟

使用例程里的SPI时钟时,你可以再调整大一些试试,比如1Mhz

之前确实没用过TI的片子
原板没22M,但是有LFXTCLK 32.768k,22M自己加焊,是高速晶振那。DCO的语句给替换掉是什么意思,删掉吗?
不知道例程为什么用LFXTCLK还要设置DCO
设置低速晶振那里,写了你高速晶振的参数说的是这句吗?CS_setExternalClockSource(32768,0);


曾经in
3楼-- · 2019-03-24 22:08
曾经in 发表于 2015-2-11 16:11
之前确实没用过TI的片子
原板没22M,但是有LFXTCLK 32.768k,22M自己加焊,是高速晶振那。DCO的语句给替换掉是什么意思,删掉吗?
不知道例程为什么用LFXTCLK还要设置DCO
“设置低速晶振那里,写了你高速晶振的参数”说的是这句吗?CS_setExternalClockSource(32768,0);




xingkong911
4楼-- · 2019-03-24 23:02
 精彩回答 2  元偷偷看……
IC爬虫
5楼-- · 2019-03-25 03:40
曾经in 发表于 2015-2-11 16:13

先检查一下你的spi时钟是否正确其实你没必要使用哪个22M的高速时钟,使用32.768kHZ的这个晶振倍频到高速时钟。


曾经in
6楼-- · 2019-03-25 08:28
IC爬虫 发表于 2015-2-11 16:36
先检查一下你的spi时钟是否正确其实你没必要使用哪个22M的高速时钟,使用32.768kHZ的这个晶振倍频到高速时钟。


总感觉SMCLK和ACLK使用是不是不太一样,32.768K能倍频没找到,倒是DCO时钟可以提供24M

一周热门 更多>

相关问题

    相关文章