|
Чтение\запись по SPI |
|
|
|
Jul 26 2012, 14:36
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
Привет всем! У меня в устройстве микроконтроллер MSP430F149, к которому подключены 3 микросхемы памяти (для четвертой есть место, но она сама отсутствует). Схему подключения привожу ниже. Моя задача написать функцию чтения\записи одного байта информации из любой микросхемы по любому адресу. Основная проблема в том, что функцию надо написать на ассемблере. Думаю, что подобную функцию, написанную на С, перевести на ассемблер проблем не составит. Подскажите, пожалуйста, с чего мне начать?
Сообщение отредактировал d7d1cd - Jul 26 2012, 14:40
|
|
|
|
|
 |
Ответов
|
Mar 22 2015, 18:51
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 12-08-13
Пользователь №: 77 889

|
Доброго времени суток! Начал осваивать работу с FRAM FM25CL64B. Контроллер -AVR mega16, копмилятор Написал тестовую программу записи / считывания (при отправке на mega16 по USART любого байта пишу и считываю). Только вот приходят одни нули. На MISO FRAM - низкий уровень, в то время как осуществляю чтение. Выкладываю код программки, может кто что подскажет. Заранее спасибо! Код #include <iom16v.h> #include <macros.h> #include <eeprom.h> #include <string.h>
#pragma interrupt_handler UART_RX_interrupt:12
#define ToggleBit(x, bit) (x^=(1<<bit))
static volatile unsigned char readdata=0x00; static volatile unsigned char readdata1=0x00; static volatile unsigned char readdata2=0x00;
void InitUART(void) { UBRRL = 0X03; // baud rate = 115200 UBRRH = 0x00; UCSRA = 0x00; UCSRB = (1<<RXEN)|(1<<TXEN); UCSRC = (3<<UCSZ0)|(0<<USBS)|(1<<URSEL); /* Set frame format: 8data, 1stop bit */ UCSRC = (1<<URSEL)|0x06; }
void SPI_MasterInit(void) { /* Set MOSI, chip select and SCK (clock) output, MISO - input */ DDRB |= (1<<PB7)|(0<<PB6)|(1<<PB5)|(1<<PB4); PORTB |= 0b01000000; // подтягиваем пин входа /* Enable SPI, Master, set clock rate fck/16 */ SPCR |= (1<<SPE)|(1<<MSTR)|(1<<SPR0); //SPI Enable, SCK frequency = fosc/16
//SPCR |=(0x0C); }
void SPI_MasterTransmit(unsigned char cData) { /* Start transmission */ SPDR = cData; /* Wait for transmission complete */ while(!(SPSR & (1<<SPIF))); }
void UART_RX_interrupt( void ) { // отправляю данные PORTB &= ~0b00010000; // chip select в 0 SPI_MasterTransmit(0b00000110);//wren SPI_MasterTransmit(0b00000010); //write SPI_MasterTransmit(0b00000011); //address SPI_MasterTransmit(0b00000011); //address SPI_MasterTransmit(0b01011100); //data SPI_MasterTransmit(0b00001111); //data SPI_MasterTransmit(0b11110000); //data PORTB |= 0b00010000; // chip select в 1 //////////////////////////////////////////// // считываю PORTB &= ~0b00010000; // chip select в 0 SPI_MasterTransmit(0b00000110); //wren SPI_MasterTransmit(0b00000011); //read SPI_MasterTransmit(0b00000011); //address SPI_MasterTransmit(0b00000011); //address //SPCR |=(0x0C); SPI_MasterTransmit(0xff); // бросаем данные чтобы генерировались такты на sck readdata= SPDR;// // считываю данные SPI_MasterTransmit(0xff); readdata1= SPDR; SPI_MasterTransmit(0xff); readdata2= SPDR; PORTB |= 0b00010000; // chip select в 1 ///////////////////////////////////////////////////////////////// while(!( UCSRA & (1 << UDRE))); UDR = readdata; //передаю на PC по USART while(!( UCSRA & (1 << UDRE))); UDR = readdata1; while(!( UCSRA & (1 << UDRE))); UDR = readdata2; ToggleBit(DDRC,7); //мигаю диодом }
void main(void) { SPI_MasterInit(); InitUART(); UCSRB |= (1<<RXCIE); // enable UART interrupts while(1) { SEI(); }
}
|
|
|
|
Сообщений в этой теме
d7d1cd Чтение\запись по SPI Jul 26 2012, 14:36 ut1wpr Цитата(d7d1cd @ Jul 26 2012, 17:36) Приве... Jul 26 2012, 15:47 d7d1cd Я конечно понимаю, что вы ошиблись, но 3 пункт зде... Jul 26 2012, 16:20 _Артём_ Цитата(d7d1cd @ Jul 26 2012, 19:20) перев... Jul 26 2012, 16:34 d7d1cd Чтобы труд не был напрасным, буду сразу писать на ... Jul 26 2012, 16:48 _Артём_ Цитата(d7d1cd @ Jul 26 2012, 19:48) Чтобы... Jul 26 2012, 17:05 rezident Цитата(d7d1cd @ Jul 26 2012, 21:48) Микро... Jul 26 2012, 21:02 d7d1cd К сожалению, схему подключения переделать нельзя. ... Jul 27 2012, 02:56 d7d1cd Поизучал ДШ. Возник вопрос по режимам SPI. Сказано... Jul 27 2012, 16:20 _Артём_ Цитата(d7d1cd @ Jul 27 2012, 19:20) Возни... Jul 27 2012, 17:25 d7d1cd Ссылку я и ранее читал. Сейчас более подробно изуч... Jul 28 2012, 04:44 _Артём_ Цитата(d7d1cd @ Jul 28 2012, 07:44) Скажи... Jul 28 2012, 12:21  d7d1cd Цитата(_Артём_ @ Jul 28 2012, 16:21) То е... Jul 28 2012, 12:57   _Артём_ Цитата(d7d1cd @ Jul 28 2012, 15:57) А есл... Jul 28 2012, 13:04 d7d1cd Спасибо за помощь. Еще такой момент: после отправк... Jul 28 2012, 13:26 _Артём_ Цитата(d7d1cd @ Jul 28 2012, 16:26) Еще т... Jul 28 2012, 13:44 d7d1cd Хочу изложить то, что я выяснил и понял как сделат... Jul 29 2012, 12:42 _Артём_ Цитата(d7d1cd @ Jul 29 2012, 15:42) Ведь ... Jul 29 2012, 16:01  d7d1cd Цитата(_Артём_ @ Jul 29 2012, 20:01) NOP ... Jul 29 2012, 16:42 d7d1cd Подошел к необходимости работать с микросхемой пам... Sep 29 2012, 14:54 _Артём_ Цитата(d7d1cd @ Sep 29 2012, 17:54) Подош... Sep 29 2012, 15:33 d7d1cd Работать планируется с микросхемой M95256. Изучив ... Sep 29 2012, 17:19 _Артём_ Цитата(d7d1cd @ Sep 29 2012, 20:19) Получ... Sep 29 2012, 17:28 d7d1cd Ну вообще не проверять я думаю не правильно. Вдруг... Sep 29 2012, 17:42 _Артём_ Цитата(d7d1cd @ Sep 29 2012, 20:42) И еще... Sep 29 2012, 17:53  d7d1cd Цитата(_Артём_ @ Sep 29 2012, 21:53) Разг... Sep 30 2012, 05:46   _Артём_ Цитата(d7d1cd @ Sep 30 2012, 08:46) Думаю... Sep 30 2012, 13:30    d7d1cd Цитата(_Артём_ @ Sep 30 2012, 17:30) Не л... Sep 30 2012, 15:06     _Артём_ Цитата(d7d1cd @ Sep 30 2012, 18:06) Как п... Sep 30 2012, 15:33 d7d1cd С самом начале моего поста есть схема. На ней выво... Oct 7 2012, 13:15 _Артём_ Цитата(d7d1cd @ Oct 7 2012, 16:15) Если м... Oct 7 2012, 15:13  d7d1cd Цитата(_Артём_ @ Oct 7 2012, 19:13) C дву... Oct 7 2012, 16:14   hash20 Цитата(d7d1cd @ Oct 7 2012, 19:14) Что зн... Oct 8 2012, 10:19 d7d1cd Понятно. То есть, в моем случае, я и читаю и запис... Oct 8 2012, 16:35 _Артём_ Цитата(d7d1cd @ Oct 8 2012, 19:35) То ест... Oct 8 2012, 20:02 rezident Цитата(d7d1cd @ Oct 8 2012, 21:35) Понятн... Oct 9 2012, 19:02  d7d1cd Цитата(rezident @ Oct 9 2012, 23:02) Я не... Oct 10 2012, 16:08   rezident Цитата(d7d1cd @ Oct 10 2012, 21:08) Спаси... Oct 10 2012, 16:21   _Артём_ Цитата(d7d1cd @ Oct 10 2012, 19:08) Вопро... Oct 10 2012, 16:26 d7d1cd Еще есть вопрос. Перед тем как начать процедуру за... Oct 9 2012, 15:47 d7d1cd Понятно. Еще вопрос возник относительно того, что ... Oct 10 2012, 17:16 rezident Цитата(d7d1cd @ Oct 10 2012, 22:16) Подск... Oct 10 2012, 17:51 d7d1cd Как я понял, после выбора м\с (Chip Select = ... Oct 11 2012, 02:55 rezident Цитата(d7d1cd @ Oct 11 2012, 07:55) Хоть ... Oct 11 2012, 09:15 d7d1cd Нк, слава транзистору! Спасибо за помощь. По... Oct 12 2012, 02:50 d7d1cd Снова вопрос. Я применяю микросхемы памяти FM25CL6... Jan 29 2013, 14:07 d7d1cd Цитата(d7d1cd @ Jan 29 2013, 18:07) Снова... Feb 5 2013, 17:28 thodnev Кхм, мне в голову пришел один дебильный вариант. М... Jan 30 2013, 18:32 d7d1cd Можно использовать, но при разборе оного вопросов ... Feb 3 2013, 16:39 d7d1cd Возвращаюсь к теме. Чтение из памяти по протоколу ... Mar 6 2013, 17:55 rezident Цитата(d7d1cd @ Mar 6 2013, 22:55) Теперь... Mar 6 2013, 19:03 d7d1cd rezident, из Вашего ответа я понял, что перед отпр... Mar 7 2013, 02:42 d7d1cd Возник такой вопрос: с какой целью создана команда... Mar 11 2013, 14:31 rezident Цитата(d7d1cd @ Mar 11 2013, 19:31) Ведь ... Mar 11 2013, 16:30  d7d1cd Цитата(rezident @ Mar 11 2013, 20:30) Не ... Mar 11 2013, 16:37   rezident Цитата(d7d1cd @ Mar 11 2013, 21:37) 1. Чт... Mar 12 2013, 09:35 d7d1cd Понял вас, rezident! Можете же грамотно поясни... Mar 12 2013, 16:57 rezident Вы бы для начала выложили наконец корректную схему... Mar 13 2013, 09:56 d7d1cd Цитата(rezident @ Mar 13 2013, 13:56) Вы ... Mar 13 2013, 14:49 rezident Сигналами CS, надеюсь, при записи в разные кристал... Mar 13 2013, 15:43 d7d1cd Какой развернутый ответ... Готовность микросхемы я... Mar 13 2013, 16:16 rezident Цитата(d7d1cd @ Mar 13 2013, 21:16) Получ... Mar 13 2013, 18:02 d7d1cd Понял. Со счетчиком все ясно. Вернувшись к моей за... Mar 14 2013, 02:51 rezident Да, именно так и нужно.
1.Читаете регистр статуса... Mar 14 2013, 05:29 d7d1cd А если в пункте 1б SRWD равен 1? В своей реализаци... Mar 14 2013, 16:46 rezident Да, в моем описании алгоритма я почему-то упустил ... Mar 14 2013, 18:41 d7d1cd Цитатанеобходимость подачи команды WREN перед запи... Mar 15 2013, 02:48 rezident Циатата из datasheet M95512
ЦитатаWhile the Write ... Mar 15 2013, 08:38
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|