реклама на сайте
подробности

 
 
> USART-SPI, MSP430F149
qwqw
сообщение Mar 26 2007, 20:26
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 192
Регистрация: 23-11-05
Из: г. Москва
Пользователь №: 11 307



странная вещь:
сконфигурил USART, как SPI мастер, 3-wire:
Код
    // USART(SPI) settings:
    U0CTL = SWRST;
    U0BR0 = 0x08; //0x02 выбор рабочей частоты SPI ,младший байт
    U0BR1 = 0x00; // ... старший байт
    U0TCTL = SSEL0+STC+CKPH+TXEPT; //ACLK, Receive_disabled(3-wire)
    ME1 = USPIE0; // SPI
    U0CTL += CHAR+SYNC+MM; // 8-bit, Master
    U0CTL -= SWRST; // !!! снимаем reset
    IE1 = UTXIE0; // Transmitter INT enable, receiver INT - disabled

хочу еще #CS сигнал рисовать с дополнительной I/O ноги
вот обработчик прер-я:
Код
// USART(SPI) action:
#pragma vector = USART0TX_VECTOR
__interrupt  void USART0_TX_Interrupt (void)
{    
  if (SPI_pocket_CT>0) { // если есть задание
                                    U0TXBUF = SPI_Data[SPI_pocket_CT];
                                    SPI_pocket_CT--;
                                   }
  else
       SPI_nCS = 1;


а вот собственно момент начала пакета в main'e:
Код
...
if (SPI_pocket_CT==0) // если SPI незанят
                                      {
                                        if (SPI_action) // по таймеру
                                                           {
                                                             SPI_action = 0; // очищаем флаг, событие обработано
                                                             SPI_Data[1] = 0x01;
                                                             // ...
                                                             SPI_Data[10] = 0x0A;
                                                             // начало задания SPI
                                                             SPI_nCS = 0;
                                                             SPI_pocket_CT = 9; // кол-во байт для передачи-1
                                                             U0TXBUF = 0x00; //SPI_Data[0]                                                        }
                                      }  
...


Смотрю SPI на осциллографе: при некоторых значениях U0BR0 (скорости передачи) мой CS в конце пакета поднимается когда UCLK еще долбит, тоесть передатчик генерит прерывание, что он готов принимать новое задание, когда последовательная транзакция еще не кончилась.
Вроде логично (нет простоев и все такое), но мне-то нужно отловить именно момент реального окончания передачи.
ЗЫ: в регистре U0TCTL бит TXEPT - вроде как то что мне надо, но почему-то он роли не играет.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01316 секунд с 7
ELECTRONIX ©2004-2016