|
Память M95-256, stm32f100+M95-256 |
|
|
|
Apr 12 2016, 12:23
|

Частый гость
 
Группа: Участник
Сообщений: 164
Регистрация: 12-04-16
Из: Белгород
Пользователь №: 91 250

|
Ребята, доброго времени суток) Бьюсь над памятью М95-256. Пишу на Си. МК -stm32f100. Хочу просто считать статусный регистр. Документация мною более-менее изучена. Не могу понять, где ошибка. Почему возвращает 255... иногда 7 возвращается. Может кто-то работал с этой зверь-машиной? Может неверный алгоритм, код, какой-то вообще левый косяк? Я в начинающих пока что. Соображаю медленно.
#include <stm32f10x.h> #include <stm32f10x_gpio.h> #include <stm32f10x_rcc.h> #include <stm32f10x_spi.h> #include <misc.h>
#define S GPIO_Pin_4 #define Port GPIOA #define D GPIO_Pin_7 #define Q GPIO_Pin_6 #define C GPIO_Pin_5 #define W GPIO_Pin_2 #define HOLD GPIO_Pin_3
void RDSR() { Port->ODR|=W; Port->ODR&=~S; SPI_I2S_SendData(SPI1,0b00000101); Port->ODR|=S; }
int main(void) { SPI_Master_Conf(); RDSR(); while(1); }
void SPI_Master_Conf() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
GPIO_InitTypeDef port; port.GPIO_Mode = GPIO_Mode_AF_PP; port.GPIO_Pin = C|Q|D; port.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(Port, &port);
GPIO_InitTypeDef port1; port1.GPIO_Mode = GPIO_Mode_Out_PP; port1.GPIO_Pin = W|S|HOLD; port1.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(Port, &port1);
Port->ODR|=S; Port->ODR&=~(HOLD|W);
SPI_InitTypeDef spi; SPI_StructInit(&spi); spi.SPI_Direction = SPI_Direction_2Lines_FullDuplex; spi.SPI_Mode = SPI_Mode_Master; spi.SPI_DataSize = SPI_DataSize_8b; spi.SPI_CPOL = SPI_CPOL_Low; spi.SPI_CPHA = SPI_CPHA_2Edge; spi.SPI_NSS = SPI_NSS_Soft; spi.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; spi.SPI_FirstBit = SPI_FirstBit_MSB; spi.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &spi); SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE); SPI_I2S_ClearITPendingBit(SPI1,SPI_I2S_IT_RXNE); NVIC_EnableIRQ(SPI1_IRQn); SPI_Cmd(SPI1, ENABLE); }
u32 answer=0; void SPI1_IRQHandler() { if(SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE)==1) { SPI_I2S_ClearITPendingBit(SPI1,SPI_I2S_IT_RXNE); answer=(u32)SPI_I2S_ReceiveData(SPI1); }
}
Сообщение отредактировал Ekka - Apr 12 2016, 12:25
|
|
|
|
|
 |
Ответов
|
Apr 14 2016, 10:16
|

Частый гость
 
Группа: Участник
Сообщений: 164
Регистрация: 12-04-16
Из: Белгород
Пользователь №: 91 250

|
Спасибо за разъяснение, Obam, т.е. функция должна быть такой??? Код Port->ODR&=~S; //выбираем чип SPI_I2S_SendData(SPI1,0b00000101); //команда СЧИТАТЬ РЕГИСТР while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_TXE)==0));//ждем, пока данные отправятся SPI_I2S_SendData(SPI1,0b00000000); //отправляем пустую команду, чтобы считать байт while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_TXE)==0)); //ждем, пока отправится while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE)==0)); //ждем, когда можно будет считать answer=SPI_I2S_ReceiveData(SPI1);//считываем байт Port->ODR|=S; //сброс чипа что-то тут не так... ждем много. И там ли я поставила ожидание. А если просто не сбрасывать чип и сделать так? Код Port->ODR&=~S; //выбираем чип SPI_I2S_SendData(SPI1,0b00000101); //команда СЧИТАТЬ РЕГИСТР while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_TXE)==0));//ждем, пока данные отправятся while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE)==0)); //ждем, когда можно будет считать answer=SPI_I2S_ReceiveData(SPI1);//считываем байт
|
|
|
|
|
Apr 14 2016, 11:01
|

Знающий
   
Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663

|
Цитата(Ekka @ Apr 14 2016, 14:16)  Спасибо за разъяснение, Obam, т.е. функция должна быть такой??? Код Port->ODR&=~S; //выбираем чип SPI_I2S_SendData(SPI1,0b00000101); //команда СЧИТАТЬ РЕГИСТР while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_TXE)==0));//ждем, пока данные отправятся SPI_I2S_SendData(SPI1,0b00000000); //отправляем пустую команду, чтобы считать байт while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_TXE)==0)); //ждем, пока отправится while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE)==0)); //ждем, когда можно будет считать answer=SPI_I2S_ReceiveData(SPI1);//считываем байт Port->ODR|=S; //сброс чипа что-то тут не так... ждем много. И там ли я поставила ожидание. Ну ё-моё ): разъяснение не подействовало? Код Port->ODR&=~S; //выбираем чип SPI_I2S_SendData(SPI1,0b00000101); //команда СЧИТАТЬ РЕГИСТР while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE)==0));//ждем, пока данные отправятся и можно будет считать answer=SPI_I2S_ReceiveData(SPI1);//считываем байт - здесь фиктивный
SPI_I2S_SendData(SPI1,0b00000000); //отправляем пустую команду, чтобы считать байт while((SPI_I2S_GetITStatus(SPI1,SPI_I2S_IT_RXNE)==0)); //ждем, пока отправится и можно будет считать answer=SPI_I2S_ReceiveData(SPI1);//считываем байт Port->ODR|=S; //сброс чипа Вы картиночку Fig.225 на стр.524 в cd00246267.pdf видели?
--------------------
Пролетарий умственного труда.
|
|
|
|
Сообщений в этой теме
Ekka Память M95-256 Apr 12 2016, 12:23 AHTOXA Не вижу включения тактирования AFIO. Это тактирова... Apr 12 2016, 15:15 Ekka Цитата(AHTOXA @ Apr 12 2016, 16:15) Не ви... Apr 13 2016, 06:25  Ekka Могут ли быть мною опущены какие-то временные заде... Apr 13 2016, 08:08   AHTOXA Вы вообще неправильно работаете с SPI.
SPI_I2S_Sen... Apr 13 2016, 09:15    Ekka Хм... ща попробуем
Спасибо Вам за ответы)))
Вот ... Apr 13 2016, 11:28     AHTOXA Цитата(Ekka @ Apr 13 2016, 16:28) Хм.... ... Apr 13 2016, 12:03      Ekka А так можно написать?
#include <stm32f10x.h... Apr 13 2016, 12:06       AHTOXA Цитата(Ekka @ Apr 13 2016, 17:06) unsigne... Apr 13 2016, 12:25        Ekka если я убираю это. Цикл WHILE , который ждет, пока... Apr 13 2016, 12:46         AHTOXA Цитата(Ekka @ Apr 13 2016, 17:46) если я ... Apr 13 2016, 13:25          Ekka Спасибо за Ваши ответы))) Микросхема начала отвеча... Apr 14 2016, 08:07     Obam Цитата(Ekka @ Apr 13 2016, 15:28) Хм... щ... Apr 14 2016, 08:40      Ekka Цитата(Obam @ Apr 14 2016, 09:40) Разреши... Apr 14 2016, 09:20 Obam Кодом в меня тыкать не надо (:
Смысл моего замеча... Apr 14 2016, 09:28 Ekka Цитата(Obam @ Apr 14 2016, 10:28) Кодом в... Apr 14 2016, 09:38    Obam Цитата(Ekka @ Apr 14 2016, 15:14) Да. Но ... Apr 14 2016, 11:57     Ekka Цитата(Obam @ Apr 14 2016, 12:57) Так при... Apr 14 2016, 12:42      Obam Цитата(Ekka @ Apr 14 2016, 16:42) Только ... Apr 14 2016, 12:49       Ekka Нет... что-то не так. Микросхема не отвечает. Хотя... Apr 14 2016, 13:05        Obam Цитата(Ekka @ Apr 14 2016, 17:05) Нет... ... Apr 14 2016, 13:12        Ekka Такая штука... как только я использую ожидание фла... Apr 14 2016, 13:16 Obam Не нервничайте, спокойно читайте datasheet и RefMa... Apr 14 2016, 13:35 Ekka Код#include <stm32f10x.h>
#include <st... Apr 15 2016, 07:24  Ekka возник др.вопрос. Чтобы считать что-нибудь из памя... Apr 15 2016, 11:51   Ekka Вроде разобралась как принять байт из памяти. Нача... Apr 15 2016, 13:18    Ekka Ребята, снова стучу в эту тему((( Недавно обнаружи... May 17 2016, 07:41 Obam Вот без обид: datasheet на память надо прочитать х... May 17 2016, 07:45 Ekka Цитата(Obam @ May 17 2016, 07:45) Вот без... May 17 2016, 07:49 Obam Всё ж пояснил; в свой код гляньте: ф-ия READ и дал... May 17 2016, 07:53 Ekka Так... у меня получается... SPI настроен на 8 бит.... May 17 2016, 08:00 Obam Адрес в память в два приёма должен выдаваться. May 17 2016, 08:01 Ekka вот же ж... попробуем May 17 2016, 08:03  Ekka но ведь принимаю я 1 байт...так?
Data out1 и Dat... May 17 2016, 08:14   Ekka УРА)) УРА) УРА) надеюсб, не зря радуюсь хоть.... С... May 17 2016, 08:45    Ekka Спасибо всем, кто помогал и тратил свои нервы и зн... May 17 2016, 09:51     Obam Цитата(Ekka @ May 17 2016, 13:51) Все пол... May 17 2016, 09:55 Obam Вы бы взяли рисуночек со стр.23 datasheet-а и отме... May 17 2016, 08:11 Obam На колу мочало - начинаем сказку с начала:
1 (проп... May 17 2016, 08:23 Obam Вот здесь самое время остановиться и начать штудир... May 17 2016, 08:58 Ekka такой нюанс
"На колу мочало - начинаем сказк... May 17 2016, 09:12 Obam Фиктивные (ладно - пусть не фиктивные. Безсмысленн... May 17 2016, 09:27
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|