Инициализирую SPI2 нижеприведенным кодом. Начинаю пихать туда в цикле значения с задержкой в пару секунд, прерывание TXE срабатывает, но на линиях выхода абсолютно глухо (смотрел осциллографом). Порты проверил отдельно, работают, если тупо выставить высокий уровень через GPIOB->BSRR. В чем может быть дело? Несколько раз всё перепроверял. Значение бита SSI никак не влияет на уровень на линии CS. Заранее большое спасибо.
Код инициализации:
CODE
SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPBEN | RCC_APB2ENR_AFIOEN);
// Включение тактования SPI2.
SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);
// Включение портов SPI:
// PB12 AFO Push-Pull @ 50 МГц (CS)
SET_BIT(GPIOB->CRH, GPIO_CRH_MODE12_0 | GPIO_CRH_MODE12_1 | GPIO_CRH_CNF12_1);
// PB13 AFO Push-Pull @ 50 МГц (SCK)
SET_BIT(GPIOB->CRH, GPIO_CRH_MODE13_0 | GPIO_CRH_MODE13_1 | GPIO_CRH_CNF13_1);
// PB14 AFI Pull-up (MISO)
SET_BIT(GPIOB->CRH, GPIO_CRH_CNF14_1);
// PB14 Pull-up.
SET_BIT(GPIOB->ODR, GPIO_ODR_ODR14);
// PB15 AFO Push-Pull @ 50 МГц (MOSI)
SET_BIT(GPIOB->CRH, GPIO_CRH_MODE15_0 | GPIO_CRH_MODE15_1 | GPIO_CRH_CNF15_1);
// Разрешаем прерывание по приёму и передаче.
SET_BIT(SPI2->CR2, SPI_CR2_RXNEIE | SPI_CR2_SSOE | SPI_CR2_TXEIE);
// SPI Baud = 36 / 4 = 9 МГц(BR = 0b001)
// Приводим поляроность сихнонизирующего сигнала в соотв. с инструкцией AD7799.
// Заставоем отправлять последний бит сначала.
// Включаем ведущего. Зажимаем Chip Select вниз (больше никого нет).
// Включаем часики.
// Включаем автомат SPI.
// По умолчанию размер пакета - 1Б.
SET_BIT(SPI2->CR1, SPI_CR1_CPOL | SPI_CR1_LSBFIRST | SPI_CR1_MSTR | SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_BR_0 | SPI_CR1_SPE);
// Разрешаем прерывание.
NVIC_EnableIRQ(SPI2_IRQn);
// Включение тактования SPI2.
SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);
// Включение портов SPI:
// PB12 AFO Push-Pull @ 50 МГц (CS)
SET_BIT(GPIOB->CRH, GPIO_CRH_MODE12_0 | GPIO_CRH_MODE12_1 | GPIO_CRH_CNF12_1);
// PB13 AFO Push-Pull @ 50 МГц (SCK)
SET_BIT(GPIOB->CRH, GPIO_CRH_MODE13_0 | GPIO_CRH_MODE13_1 | GPIO_CRH_CNF13_1);
// PB14 AFI Pull-up (MISO)
SET_BIT(GPIOB->CRH, GPIO_CRH_CNF14_1);
// PB14 Pull-up.
SET_BIT(GPIOB->ODR, GPIO_ODR_ODR14);
// PB15 AFO Push-Pull @ 50 МГц (MOSI)
SET_BIT(GPIOB->CRH, GPIO_CRH_MODE15_0 | GPIO_CRH_MODE15_1 | GPIO_CRH_CNF15_1);
// Разрешаем прерывание по приёму и передаче.
SET_BIT(SPI2->CR2, SPI_CR2_RXNEIE | SPI_CR2_SSOE | SPI_CR2_TXEIE);
// SPI Baud = 36 / 4 = 9 МГц(BR = 0b001)
// Приводим поляроность сихнонизирующего сигнала в соотв. с инструкцией AD7799.
// Заставоем отправлять последний бит сначала.
// Включаем ведущего. Зажимаем Chip Select вниз (больше никого нет).
// Включаем часики.
// Включаем автомат SPI.
// По умолчанию размер пакета - 1Б.
SET_BIT(SPI2->CR1, SPI_CR1_CPOL | SPI_CR1_LSBFIRST | SPI_CR1_MSTR | SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_BR_0 | SPI_CR1_SPE);
// Разрешаем прерывание.
NVIC_EnableIRQ(SPI2_IRQn);
Код, пихающий значения:
CODE
while (1) {
Delay(10000000);
SPI2->DR = 0xF;
}