MSP430FR2433 用driverlib方式 SPI調試記錄

由於MSP430FR2433紅板子搞活動,弄了幾塊玩玩,發現網上很多MSP430系列的SPI很多都使用普通的GPIO模擬SPI,很少有說如何使用driverlib來操作GPIO的,MSP430本身就支持SPI,爲何費勁要用GPIO模擬呢?

  • MSP430系列TI提供了driverlib方便用戶進行開發,driverlib是對標準的寄存器操作進行了二次封裝,用戶只需要調用API就可以了,非常方便。
  • 這裏有一個迷惑的地方,就是primary function和secondary以及ternary這三個功能對應的芯片GPIO是怎麼對應的,剛開始很困惑,其實非常簡單,由於MSP430是兼容了UART和SPI,但是同一個引腳同一時刻只有一個功能工作,如果工作在SPI模式,那麼UART就無效了,反之亦然,看一下TRM手冊就明白了。

直接上SPI初始化代碼

    // Configure SPI Pins for UCA0CLK, UCA0TXD/UCA0SIMO and UCA0RXD/UCA0SOMI
    /*
    * Select Port 1
    * Set Pin 4, Pin 5 and Pin 6 to input Primary Module Function
    */
    GPIO_setAsPeripheralModuleFunctionInputPin(
    	GPIO_PORT_P1,
    	GPIO_PIN4+GPIO_PIN5+GPIO_PIN6,
    	GPIO_PRIMARY_MODULE_FUNCTION
    );    
    
    GPIO_setAsOutputPin(GPIO_PORT_P3,GPIO_PIN1);
    GPIO_setOutputLowOnPin(GPIO_PORT_P3, GPIO_PIN1);
    
    GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN7);
    GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN7);    

    /*
     * Disable the GPIO power-on default high-impedance mode to activate
     * previously configured port settings
     */
    PMM_unlockLPM5();

    //Initialize Master
    EUSCI_A_SPI_initMasterParam param = {0};
    param.selectClockSource = EUSCI_A_SPI_CLOCKSOURCE_SMCLK;
    param.clockSourceFrequency = CS_getSMCLK();
    param.desiredSpiClock = 500000;
    param.msbFirst = EUSCI_A_SPI_MSB_FIRST;
    param.clockPhase = EUSCI_A_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT;
    param.clockPolarity = EUSCI_A_SPI_CLOCKPOLARITY_INACTIVITY_HIGH;
    param.spiMode = EUSCI_A_SPI_3PIN;
    EUSCI_A_SPI_initMaster(EUSCI_A0_BASE, &param);

    //Enable SPI module
    EUSCI_A_SPI_enable(EUSCI_A0_BASE);

    //Clear receive interrupt flag
    EUSCI_A_SPI_clearInterrupt(EUSCI_A0_BASE,
          EUSCI_A_SPI_RECEIVE_INTERRUPT
          );

    // Enable USCI_A0 RX interrupt
    EUSCI_A_SPI_enableInterrupt(EUSCI_A0_BASE,
                         EUSCI_A_SPI_RECEIVE_INTERRUPT);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章