Мы пытаемся отправить 16-битное значение из одного PSoC в другой.
Суть этой операции должна быть довольно простой:
- Разделить значение на два 8-битных значения, одно для MSB и одно для LSB
- Отправьте MSB, а затем LSB из системы 1
- Получите MSB и затем LSB в системе 2
- Объединить два байта путем сдвига битов MSB и затем LSB-маскировки.
- Прибыль
Итак, как мы это делаем на практике:
//Split and send
uint16 utest = (uint16)test;
uint8 hibyte = utest>>8;
uint8 lowbyte = utest;
UART_PutChar(hibyte);
UART_PutChar(lowbyte);
Система 2 (ISR для байта получено):
//Recieve and merge
uint8 rx_msb = UART_GetByte();
uint8 rx_lsb = UART_GetByte();
rx_udata = ((uint16)rx_msb << 8) | rx_lsb;
sprintf(TransmitBufferUSB,"%d\n\r",rx_udata);
UART_USB_PutString(TransmitBufferUSB);
Проблема в том, что этот код не соответствует. И мы почти никогда не получаем те же данные, что отправляем.
Другая проблема возникает, когда мы пытаемся отправить данные на компьютер с помощью функции UART_USB_PutString в системе 2. Мы получаем два набора% d \ n \ r в терминале замазки, один из которых может быть отправлено правильное значение и другой, который кажется довольно случайным.
Другая информация
Имейте в виду, что мы впервые работаем с UART в любых условиях, поэтому мы также можем использовать советы и рекомендации, если они у вас есть.
Если вам нужна какая-либо другая информация или у вас есть идеи, как починить этот сломанный кусок дерьма, сообщите нам.
С уважением, два студента электроники noob работают над PSoC
\ de_rush