3000 грн на місяць

MSP430 и USCI

  • Автор теми Автор теми Das Zugunfall
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 20.04.2006
Повідом.: 38067
MSP430 и USCI

Кто имел дело с MSP430G2553 и его USCI?

Пытаюсь сделать UART <-> SPI конвертер на нем, сплошная беда с синхронизацией.
Иничу SPI трансивер на B-канале USCI:
P1SEL |= SOMI + SIMO + CLK; //P1.6, P1.7, P1.5
P1SEL2 |= SOMI + SIMO + CLK;
P1DIR |= STE; //P1.4
P1OUT |= STE;
UCB0CTL1 = UCSWRST;
UCB0CTL0 |= UCMSB + UCSYNC + UCMST;
UCB0CTL0 &= ~UCCKPH + UCCKPL;
UCB0CTL1 |= UCSSEL_2;
UCB0BR0 = 80;
UCB0BR1 = 0;
UCB0CTL1 &= ~UCSWRST;
IE2 |= UCB0RXIE;

Целевой девайс перед общением требует сброс в таком виде (единица на CS-пине (STE) в течение двух клоков):
P1OUT |= STE;
__delay_cycles(80);

P1SEL &= ~CLK;
P1SEL2 &= ~CLK;
P1DIR |= CLK;

P1OUT |= CLK;
__delay_cycles(80);
P1OUT &= ~CLK;
__delay_cycles(80);
P1OUT |= CLK;
__delay_cycles(80);
P1OUT &= ~CLK;
__delay_cycles(80);

P1SEL |= CLK;
P1SEL2 |= CLK;
P1DIR &= ~CLK;
Тут такой выебос с CLK-пином из-за того, что изначально он конфигурится как SPI Master Clock, а мне надо на нем два клока без реального обмена сделать, поэтому он возвращается в GPIO-режим а потом обратно в SPI Clock.

Потом гашу STE и пишу/читаю в UCB0ТXBUF/UCB0RXBUF когда поднимутся флаги UCB0TXIFG и UCB0RXIFG соответственно.
В итоге, в пошаговом дебаге весь обмен идет удачно, а если сделать несколько циклов отправка/прием за один присест - где-то виснет в процессе, то есть на ожидании флагов готовности буферов отправки/приема походу.
Задолбало уже, хочется поработать с тем девайсом конечным, а тут такая засада с переходником.
 
Останнє редагування:
Вроде разобрался - надо просто RX-прерывание не включать (ну логично, нах оно в master mode?).
Если оставить эту строчку, то начинаются какие-то косяки с UCB0RXIFG.
 
сам їз собою спілкуєшся?

доречі, а чому саме цей проц? збочення якесь, як на мене
 
сам їз собою спілкуєшся?

доречі, а чому саме цей проц? збочення якесь, як на мене

Просто завалялось 3 штуки Launchpad-ов, а тут пришло с десяток китайских HC-06 BT-модулей. Хотелось бы с ними поиграться, а родной софт работает или через LPT-SPI-самопал на делителях, или через фирменный программатор за 300 баксов. LPT я забыл как выглядит в прошлом веке еще, зато нашел в инете, что какой-то чувак дизассемблил родную либу для LPT и переделал ее на UART под ардуину. Ну ардуины у меня нема, да и атмеги в хозяйстве тоже не нашел, вот решил под MSP перепилить.
 
- а с чем вы,собственно, пытаетесь связаться? Проблема у вас, похоже, с протоколом, а не с микроконтроллером. Можете попробовать тупое но бронебойное решение - bit banging. To есть, написать свою версию SPI модуля. При наличии небольшого опыта займет это часа полтора-два, но зато не будете зависеть от странностей "целевого девайса".
 
- а с чем вы,собственно, пытаетесь связаться? Проблема у вас, похоже, с протоколом, а не с микроконтроллером. Можете попробовать тупое но бронебойное решение - bit banging. To есть, написать свою версию SPI модуля. При наличии небольшого опыта займет это часа полтора-два, но зато не будете зависеть от странностей "целевого девайса".

Да все там работает и без бит-бэнга, просто в изначальной ДЛЛ-ке для ардуийни аффтар пишет в УАРТ и сразу читает - не успевает железка отработать, а если добавить хотя бы Sleep-ы между ними, то все пучком. Надо с SetCommTimeouts() поиграться.
 
Назад
Зверху Знизу