|
MSP-EXP430F5529, I2C slave transmitter проблема |
|
|
|
Oct 5 2011, 15:50
|
Частый гость
 
Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335

|
Добрый день!
Есть борд MSP-EXP430F5529. Запускаю I2C. Среда IAR. Загрузил пример от TI MSP430F55xx_uscib0_i2c_05, который делает борд ведомым передатчиком и отправляет число по I2C мастеру. Заметил странность, мастер получает числа как будто деленные на 2. В теле программы создал константу и отправляю ее на передачу, мастером вижу, что число в два раза меньше, к примеру оправляю 0xAA получаю 0x55, отправляю 0хFF получаю 0x7F. Такое ощущение что сдвиговый регистр отнимает единицу от количества требуемых сдвигов, из-за этого получается деление на два. Читал мануал, код вроде правильный, а непонимание есть. Что это такое, как это понять и устранить?
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 14)
|
Oct 5 2011, 17:50
|
Частый гость
 
Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335

|
Код #include <msp430f5529.h>
unsigned char TXData; unsigned char i=0;
void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P3SEL |= 0x03; // Assign I2C pins to USCI_B0 UCB0CTL1 |= UCSWRST; // Enable SW reset UCB0CTL0 = UCMODE_3 + UCSYNC; // I2C Slave, synchronous mode UCB0I2COA = 0x48; // Own Address is 048h UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation UCB0IE |= UCTXIE + UCSTTIE + UCSTPIE; // Enable TX interrupt // Enable Start condition interrupt TXData = 0xAA; // Used to hold TX data
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0 w/ interrupts __no_operation(); // For debugger }
// USCI_B0 State ISR #pragma vector = USCI_B0_VECTOR __interrupt void USCI_B0_ISR(void) { switch(__even_in_range(UCB0IV,12)) { case 0: break; // Vector 0: No interrupts case 2: break; // Vector 2: ALIFG case 4: break; // Vector 4: NACKIFG case 6: // Vector 6: STTIFG UCB0IFG &= ~UCSTTIFG; // Clear start condition int flag break; case 8: // Vector 8: STPIFG //TXData++; // Increment TXData UCB0IFG &= ~UCSTPIFG; // Clear stop condition int flag break; case 10: break; // Vector 10: RXIFG case 12: // Vector 12: TXIFG UCB0TXBUF = TXData; // TX data break; default: break; } } Вот ссылка на архив со всеми примерами для данного кристалла
Сообщение отредактировал *rust* - Oct 5 2011, 17:43
|
|
|
|
|
Oct 6 2011, 18:31
|
Частый гость
 
Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335

|
Цитата Вы никаких, извиняюсь, необычных грибов на обед не вкушали? Что за истерика? Своей фразой я хотел лишь подчеркнуть, что поведение модуля при частотах от 100кГц до 1МГц одинаковое. Это же не криминал, чисто из любопытства попробовать разные частоты, никто ж в конечном счете не умрет. Все проверки делал на частоте 100кГц. Код Кстати, а резисторы на шине к питанию MSP430 подтянуты или к другому напряжению? У FTDI на VССIO то же самое по величине напряжение, что и на MSP430 подается, надеюсь? Все по спецификации I2C.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|