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

 
 
> MSP430 + W5100, Проблемы с инициализацией по SPI
failguru
сообщение Oct 12 2013, 12:44
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 1-11-11
Пользователь №: 68 094



Добрый день. Решил подключить DFRduino Ethernet Shield к MSP-EXP430G2533 по SPI интерфейсу, но возникли трудности. Делаю по даташиту:
- Передаю opcode 0xf0 для записи
- Младшие 8 бит адреса регистра (в ответ в приемном буфере появляется 0x01 при отладке)
- Старшие 8 бит адреса регистра (в ответ в приемном буфере появляется 0x02 при отладке)
- Данные (а тут чаще всего появляется 0x00, хотя должно быть 0x03 при записи, а при чтении собственно значение регистра)
Иногда проходит, и даже читает регистр, но чаще всего нет.
Пробовал изменять скорость не помогает. Вот код, все просто. Но не могу понять в чем дело. И как правильно принять данные из приемного буфера. Раньше с SPI не работал. Делаю в Code Composer Studio 5.2.1.

Код
#include  <msp430g2553.h>

unsigned int i = 0;

void writeB(unsigned int addr, unsigned char data){
    P2OUT &= ~BIT5;  //SS Low
    UCB0TXBUF = 0xF0; // Send write opcode
    while (!(IFG2 & UCB0TXIFG));
    UCB0TXBUF = (addr & 0xFF00) >> 8;
    while (!(IFG2 & UCB0TXIFG) && UCB0RXBUF!=0x01);
    UCB0TXBUF = addr & 0x00FF;
    while (!(IFG2 & UCB0TXIFG) && UCB0RXBUF!=0x02);
    UCB0TXBUF = data;
    while (!(IFG2 & UCB0TXIFG) && UCB0RXBUF!=0x03);
    P2OUT |= BIT5; //SS Hight
}

void readB(unsigned int addr){
    P2OUT &= ~BIT5;  //SS Low
    UCB0TXBUF = 0x0F; // Send read opcode
    while (!(IFG2 & UCB0TXIFG));
    UCB0TXBUF = (addr & 0xFF00) >> 8;
    while (!(IFG2 & UCB0TXIFG) && UCB0RXBUF!=0x01);
    UCB0TXBUF = addr & 0x00FF;
    while (!(IFG2 & UCB0TXIFG) && UCB0RXBUF!=0x02);
    UCB0TXBUF = 0x00;
    while (!(IFG2 & UCB0TXIFG) && UCB0RXBUF==0x02);
    i = UCB0RXBUF;
    P2OUT |= BIT5; //SS Hight
}


void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;
    P1DIR |= BIT0; // Led DIR
    P1OUT |= BIT0; // Led OUT
    P1SEL |= BIT5 + BIT6 + BIT7;    //CLK + MISO + MOSI
    P1SEL2 |= BIT5 + BIT6 + BIT7;    //CLK + MISO + MOSI
    P2DIR |= BIT0 + BIT5;    //reset pin + SS
    P2OUT |= BIT0 + BIT5;    //reset pin + SS

    //Init SPI
    UCB0CTL1 |= BIT0;
    UCB0CTL0 = 0x29;
    UCB0CTL1 |= BIT7 + BIT6;
    UCB0BR0 = 0x04;
    UCB0BR1 = 0x00;
    UCB0CTL1 &= ~BIT0; // Lets go!

    //Init Wiznet
    P2OUT &= ~BIT0;        //reset w5100
    __delay_cycles(100000);
    P2OUT |= BIT0;
    writeB(0x0000, 0x80); //Soft reset MR
    writeB(0x0016,0x00); //IMR
    writeB(0x0017,0x0F); //RTR1
    writeB(0x0018,0xA0); //RTR2
    writeB(0x0019,0x08); //RCR
    readB(0x0019);

    for (;;) {
    P1OUT |= BIT0;
    __delay_cycles(100000);
    P1OUT &= ~BIT0;
    __delay_cycles(100000);
    }
}


Вот фото https://docs.google.com/file/d/0B4fYmLl01kZ...dit?usp=sharing
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- failguru   MSP430 + W5100   Oct 12 2013, 12:44


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

 


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


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