工具/软件:Code Composer Studio
大家好、我现在在 MSP430F5244上工作。 我的问题是、当我以1MHz 速度运行控制器时、SPI 的工作速度略有下降、如果我以8MHz SPI 运行控制器完全不起作用、我粘贴了我的代码、请帮助我遇到问题的人。
#include
#include
//#include "System_clk.h"
//#include "spi_function.h"
void systemClockConfigure_8MHz ()
{
PMAPPWD = 0x02D52; //启用写入访问以修改端口映射寄存器
P4MAP7 = PM_MCLK;
PMAPPWD=0; //禁用写访问以修改端口映射寄存器
UCSCTL3 = SELREF_2; //设置 DCO FLL 基准= REFO
UCSCTL4 |= SELA_2 /*| SELESS_DCOCLK*/; //设置 ACLK = REFO
_bis_SR_register (SCG0); //禁用 FLL 控制环路
UCSCTL0 = 0x0000; //设置可能的最低 DCOx、MODx
UCSCTL1 = DCORSEL_5; //选择 DCO 范围16MHz 操作
UCSCTL2 = FLLD_1 + 249; //为8MHz 设置 DCO 乘法器
//(N + 1)* FLLRef = Fdco
//(249 + 1)* 32768 = 8MHz
_BIC_SR_register (SCG0); //启用 FLL 控制环路
// DCO 范围位已经存在时、DCO 的最坏情况稳定时间
//已更改 n x 32 x 32 x f_MCLK / f_FLL_reference。 请参阅5xx 中的 UCS 一章
// UG 进行优化。
// 32 x 32 x 8 MHz/32、768Hz = 250000 = MCLK 周期、DCO 才能稳定
_DELAY_CYCLES (250000);
//循环直到 XT1、XT2和 DCO 稳定-在这种情况下、只有 DCO 必须稳定
操作
{
UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG; //清除故障标志
} while (SFRIFG1&OFIFG); //测试振荡器故障标志
UCSCTL4 |= SELESS_DCOCLK | SELM_DCOCLK; //MCLK 和 SMCLK=DCOCLK
}
void systemClockConfigure_1MHz ()
{
PMAPPWD = 0x02D52; //启用写入访问以修改端口映射寄存器
P4MAP7 = PM_MCLK;
PMAPPWD=0; //禁用写访问以修改端口映射寄存器
UCSCTL4 |= SE拉美 经济体系2; //设置 ACLK = REFO
}
void SPI_UCB1Init()
{
P4DIR |= BIT1 |BIT3;
P4SEL |= BIT1 |BIT3; // SPI 的 MISO 和 clk 引脚
UCB1CTL1 |= UCSWRST;
UCB1CTL0 ||(UCMSB | UCSYNC | UCMST | UCCKPL);//3Wire_SPI + SYNC_MODE + MSB FIRST + MASTER_MODE UCCKPH || UCCKPL
UCB1CTL1 |= UCSSEL_SMCLK; //SMCLK UCSSEL_SMCLK 12MHz
UCB1BR0 = 0x00;
UCB1BR1 = 0x00;
UCB1CTL1 &=~UCSWRST;
}
void SPI_LCDTx (uint8_t value)
{
UCB1TXBUF=值;
while (!(UCB1IFG & UCTXIFG))
;
}
/*
main.c
*/
int main (void){
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
// systemClockConfigure_1MHz ();
systemClockConfigure_8MHz ();
SPI_UCB1Init();
while (1)
{
SPI_LCDTx ('A');
SPI_LCDTx ('b');
SPI_LCDTx ('c');
}
返回0;
}