Ребята, доброго времени суток) Бьюсь над памятью М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);
}
}