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

 
 
> Чтение и запись во внешнюю память.
Jenya7
сообщение Jun 25 2015, 05:43
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Это функции чтения/записи.
Код
void SPIEEPROM_WriteInt(uint32_t addr, uint32_t *ival)
{
  SPIEEPROM_Write(addr,sizeof(uint32_t),(uint8_t*) ival);
}

uint32_t SPIEEPROM_ReadInt(uint32_t addr)
{
    uint32_t value;
    SPIEEPROM_Read(addr, sizeof(uint32_t), (uint8_t*)&value);
    return value;
}

void SPIEEPROM_WriteFloat(uint32_t addr, float *fval)  
{
  SPIEEPROM_Write(addr,sizeof(float),(uint8_t*) fval);
}

float SPIEEPROM_ReadFloat(uint32_t addr)
{
    float value;
    SPIEEPROM_Read(addr, sizeof(float), (uint8_t*)&value);
    return value;
}

А так я тестирую.
Код
uint32_t adr;
if(argument1 == NULL)
  UART_SendString(UART0,msg_misarg);
else
{
  adr = atoi(argument1);
  if(argument2 == NULL) //read operation
  {
      #ifdef SPI_INT
      uint32_t ival = SPIEEPROM_ReadInt(adr);
      UART_SendInt(UART0,ival);
      #endif
      #ifdef SPI_FLOAT
       float fval = SPIEEPROM_ReadFloat(adr);
        UART_SendFloat(UART0,fval,2);
      #endif
    }
    else  //write operation
    {                    
        #ifdef SPI_INT
         uint32_t ival = atoi(argument2);
        SPIEEPROM_WriteInt(adr, &ival);
         #endif
         #ifdef SPI_FLOAT
          float fval = atof(argument2);
          SPIEEPROM_WriteFloat(adr, &fval);
          #endif
                    
     }
}

float пишется-читается прекрасно.
а вот с uint32_t непонятное явление - пишет (или читает?) неправильно.
вот например
запись - чтение
100 - 255
300 - 511
1000 - 1023
Сижу второй день над проблемой не могу понять где собака порылась.

Сообщение отредактировал Jenya7 - Jun 25 2015, 05:44
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Jenya7
сообщение Jun 25 2015, 13:37
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



OMG!!!
нашел проблему. в SPIEEPROM_Read() заменил все SPI_SendByte на SPI_TransferByte().
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jun 25 2015, 13:42
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(Jenya7 @ Jun 25 2015, 16:37) *
OMG!!!
нашел проблему. в SPIEEPROM_Read() заменил все SPI_SendByte на SPI_TransferByte().

1111493779.gif
Мои поздравления.

Приведите тогда уж код обеих функций - посмотрим чем они отличаются. И почему с одной не работает, а со второй работает.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jun 25 2015, 14:05
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(mempfis_ @ Jun 25 2015, 19:42) *
1111493779.gif
Мои поздравления.

Приведите тогда уж код обеих функций - посмотрим чем они отличаются. И почему с одной не работает, а со второй работает.


Код
void SPI_SendByte(USART_TypeDef  *usart,uint8_t sendbyte)
{
    /* Check that transmit buffer is empty */
    while (!(usart->STATUS & USART_STATUS_TXBL));

    usart->TXDATA = (uint32_t)sendbyte;

    /* Wait for transmitting to finished */
  while (!(usart->STATUS & USART_STATUS_TXC));
}


uint32_t SPI_TransferByte(USART_TypeDef *usart,uint32_t sendbyte)
{
   /* Check that transmit buffer is empty */
  while (!(usart->STATUS & USART_STATUS_TXBL));

  usart->TXDATA = (uint32_t)sendbyte;

  /* Wait for transmitting to finished */
  while (!(usart->STATUS & USART_STATUS_TXC));

  //return data;
    return majority32const(&usart->RXDATA);

}


Сообщение отредактировал Jenya7 - Jun 25 2015, 14:08
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jun 25 2015, 15:46
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Я во всех примерах работы с SPI всех мк с которыми работал видел чтение регистра данных после завершения передачи. Даже если результат нафиг не нужен. С STM32 работал но Hard SPI пока не использовал. Буду знать что принцип работы с ним схож с другими мк.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jun 25 2015, 16:30
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(mempfis_ @ Jun 25 2015, 21:46) *
Я во всех примерах работы с SPI всех мк с которыми работал видел чтение регистра данных после завершения передачи. Даже если результат нафиг не нужен. С STM32 работал но Hard SPI пока не использовал. Буду знать что принцип работы с ним схож с другими мк.

Но что интересно float читался правильно. Наверно надо очищать приемный буфер в любом случае, иначе что то там глючит.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Чтение и запись во внешнюю память.   Jun 25 2015, 05:43
- - mcheb   Цитата(Jenya7 @ Jun 25 2015, 08:43) SPIEE...   Jun 25 2015, 05:52
|- - Jenya7   Цитата(mcheb @ Jun 25 2015, 11:52) А это ...   Jun 25 2015, 06:26
|- - mempfis_   Цитата(Jenya7 @ Jun 25 2015, 09:26) сдела...   Jun 25 2015, 07:29
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 13:29) Ник...   Jun 25 2015, 07:41
|- - mempfis_   Цитата(Jenya7 @ Jun 25 2015, 10:41) но fl...   Jun 25 2015, 07:55
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 13:55) ОК....   Jun 25 2015, 08:18
|- - mempfis_   Цитата(Jenya7 @ Jun 25 2015, 11:18) я ста...   Jun 25 2015, 08:29
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 14:29) Мож...   Jun 25 2015, 08:55
|- - mempfis_   Цитата(Jenya7 @ Jun 25 2015, 11:55) IAR V...   Jun 25 2015, 09:10
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 15:10) По ...   Jun 25 2015, 09:40
|- - mempfis_   Цитата(Jenya7 @ Jun 25 2015, 12:40) я дум...   Jun 25 2015, 10:11
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 16:11) Пер...   Jun 25 2015, 10:17
|- - mempfis_   Цитатая смотрел и осциллографом и Logic Analizer ...   Jun 25 2015, 10:32
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 16:32) т.е...   Jun 25 2015, 10:58
|- - mempfis_   Цитата(Jenya7 @ Jun 25 2015, 13:58) пока ...   Jun 25 2015, 11:13
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 17:13) Мож...   Jun 25 2015, 11:23
- - Сергей Борщ   В функциях из первого сообщения ошибок нет. Как вы...   Jun 25 2015, 11:25
|- - Jenya7   Цитата(Сергей Борщ @ Jun 25 2015, 17:25) ...   Jun 25 2015, 11:40
- - Сергей Борщ   Цитата(Jenya7 @ Jun 25 2015, 16:37) нашел...   Jun 26 2015, 05:03
- - Jenya7   Цитата(Сергей Борщ @ Jun 26 2015, 11:03) ...   Jun 28 2015, 05:26


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:16
Рейтинг@Mail.ru


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