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

 
 
> Программный SPI (для карты памяти MMC), нужна помощь
sergeus
сообщение Nov 26 2009, 19:34
Сообщение #1


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

Группа: Участник
Сообщений: 157
Регистрация: 11-12-07
Из: Москва
Пользователь №: 33 174



Здравствуйте!
Уже больше часа бьюсь с программной реализацией SPI. При аппаратной реализации карточка памяти инициализировалась и даже читалась, все было нормально. Встала задача реализовать сей интерфейс программно. Вот кусок кода:
Код
unsigned char spi_transmit(unsigned char data){
  unsigned char value,i;
  for (i=0;i<8;i++){
    asm("nop");
    SCK_0;
    asm("nop");
    if ((data & 0b10000000) != 0) SPI_PORT |= (1<<MOSI);
    asm("nop");
    data = data << 1;
    asm("nop");
    value = value << 1;
    SCK_1;
    asm("nop");
    if ((SPI_PIN & (1<<MISO)) != 0){
      value |=0b00000001;
    }
  }
  return value;
}

Может кто свежим взглядом заметит баг.
Тактовая контроллера 8 МГц, контроллер - ATmega48.

Забыл добавить, вот дефайны:
Код
#define MOSI    5
#define MISO    4
#define SCK        3
#define SS        2
#define SPI_DDR    DDRC
#define SPI_PORT PORTC
#define SPI_PIN PINC

#define cbi(reg, bit) (reg&=~(1<<bit))
#define sbi(reg, bit) (reg|= (1<<bit))

#define MMC_CS_1         sbi(SPI_PORT, SS)
#define MMC_CS_0         cbi(SPI_PORT, SS)

#define SCK_1         sbi(SPI_PORT, SCK)
#define SCK_0         cbi(SPI_PORT, SCK)


заметил баг в первом else, ща попробую скомпилить

Сообщение отредактировал sergeus - Nov 26 2009, 19:31
Go to the top of the page
 
+Quote Post



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

 


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


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