Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Инициализация скорости SPI
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Oleg_IT
Разбираюсь в работе МК.
В примере, привёл ниже, даны следующие две функции. Не понятно, почему скорость SPI инициализируется нулём? В примечании написано

UxBRx Биты 7-0 Генератор скорости передачи использует содержимое {UxBR1+UxBR0} для установки скорости передачи. Наименьший коэффициент деления равен двум.
Больше в коде ни где нет обращения к регистрам UCB1BR0 и UCB1BR1.

Код
/********************************************************************************
***
* @fn          halRadioSpiInit
*
* @brief       Initalise Radio SPI interface
*
* @param       none
*
* @return      none
*/
static void halRadioSpiInit(uint32 divider)
{
    UCB1CTL1 |= UCSWRST;                          // Put state machine in reset
    UCB1BR0 = LO_UINT32(divider);
    UCB1BR1 = HI_UINT32(divider);
    P5DIR |= 0x01;
    P5SEL |= 0x0E;                               // P7.3,2,1 peripheral select (mux to ACSI_A0)
    UCB1CTL1 = UCSSEL0 | UCSSEL1;                // Select SMCLK
    UCB1CTL0 |= UCCKPH | UCSYNC | UCMSB | UCMST; // 3-pin, 8-bit SPI master, rising edge capture
    UCB1CTL1 &= ~UCSWRST;                        // Initialize USCI state machine
}

……………………………

/********************************************************************************
***
* @fn      halAssyInit
*
* @brief   Initialize interfaces between radio and MCU
*
* @param   none
*
* @return  none
*/
void halAssyInit(void)
{
    halRadioSpiInit(0);
    halMcuRfInterfaceInit();
#ifndef MRFI_CC2520
    halDigioConfig(&pinRadio_GPIO0);
#endif
}
jorikdima
Если память не изменяет, то в BR можно писать ноль, но реально нулем он не станет, а станет наименьшим возможным числом - 2. Проверьте по дебаггеру, ноль ли там. Возможно, сделано для того, чтоб установить максимально возможную скорость на SPI
mdmitry
У меня в коде так:
Код
UCAxBR0 = 2
UCAxBR1 = 0

из SLAU208E (для msp430f54xx)
Цитата
Bit clock prescaler. The 16-bit value of (UCxxBR0 + UCxxBR1 × 256) forms the prescaler value UCBRx.

Что-то мне не понравилось при 1 (давно было), использую 2. Формально не нашел запрета на использование 1.
FREEKER
А я использую следующее:
Мы знаем скорость тактирования, и нам нужна скорость SPI
После #include "msp430x16x.h" вставляем определение:
Код
#define Fosc 8000000        //Hz - Частота тактирования кварца или внутреннего генератора
#define Cspi 4800        //Bit - требуемая скорость SPI
#define Kff Fosc/Cspi


Инициализация SPI выглядит так:
Код
        ME2 |= USPIE1;
        U1CTL = 0x5E;        //#01010111b;        The inactive level is high, ACLC
        U1TCTL = 0x12;        //#0001 0010b        p294(Slau049f)
        U1BR0 = Kff%256;    // Наша скорость будет здесь
        U1BR1 = Kff/256;    // и здесь
        U1MCTL = 0x00;
        U1CTL &=~0x01;


Для MSP430F2*** инициализация будет выглядеть иначе, но смысл тот же.
Вот так:
Код
        UCB1CTL0 |= UCCKPL + UCMST + UCSYNC;    // The inactive state is high, Master mode, Synchronous Mode
        UCB1CTL1 |= UCSWRST + UCSSEL_2;            // SMCLK, Enabled. USCI logic held in reset state.
        UCB1BR0 = Kff%256;
        UCB1BR1 = Kff/256;
        UCB1CTL1 &=~UCSWRST;            // Disabled. USCI reset released for operation.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.