📄 client.c
字号:
send = (UINT8)(addr & 0xFF); UartWrite(serial_handle, &send, 1); UartRead(serial_handle, &received, 1); // response if (received != ADDRESS) { printf("Protocol error, receiced 0x%02X!\n", received); return 1; } // send the write command send = BYTE_WRITE; UartWrite(serial_handle, &send, 1); // transmit the data UartWrite(serial_handle, &byte, 1); UartRead(serial_handle, &received, 1); // response if (received != BYTE_WRITE) { printf("Protocol error!\n"); return 1; } return 0;}// read many bytes using the target monitorint ReadByteMultiple(tUartHandle serial_handle, UINT32 addr, UINT32 size, UINT8* pBuffer){ UINT8 send, received; // send the address command send = ADDRESS; UartWrite(serial_handle, &send, 1); // transmit the address, big endian send = (UINT8)((addr>>24) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)((addr>>16) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)((addr>>8) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)(addr & 0xFF); UartWrite(serial_handle, &send, 1); UartRead(serial_handle, &received, 1); // response if (received != ADDRESS) { printf("Protocol error!\n"); return 1; } while (size) { if (size >= 16) { // we can use a "burst" command send = BYTE_READ16; UartWrite(serial_handle, &send, 1); // send the read command UartRead(serial_handle, pBuffer, 16); // data response pBuffer += 16; size -= 16; } else { // use single byte command send = BYTE_READ; UartWrite(serial_handle, &send, 1); // send the read command UartRead(serial_handle, pBuffer++, 1); // data response size--; } } return 0;}// write many bytes using the target monitorint WriteByteMultiple(tUartHandle serial_handle, UINT32 addr, UINT32 size, UINT8* pBuffer){ UINT8 send, received; // send the address command send = ADDRESS; UartWrite(serial_handle, &send, 1); // transmit the address, big endian send = (UINT8)((addr>>24) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)((addr>>16) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)((addr>>8) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)(addr & 0xFF); UartWrite(serial_handle, &send, 1); UartRead(serial_handle, &received, 1); // response if (received != ADDRESS) { printf("Protocol error!\n"); return 1; } while (size) { if (size >= 16) { // we can use a "burst" command send = BYTE_WRITE16; UartWrite(serial_handle, &send, 1); // send the write command UartWrite(serial_handle, pBuffer, 16); // transmit the data UartRead(serial_handle, &received, 1); // response if (received != BYTE_WRITE16) { printf("Protocol error!\n"); return 1; } pBuffer += 16; size -= 16; } else { // use single byte command send = BYTE_WRITE; UartWrite(serial_handle, &send, 1); // send the write command UartWrite(serial_handle, pBuffer++, 1); // transmit the data UartRead(serial_handle, &received, 1); // response if (received != BYTE_WRITE) { printf("Protocol error!\n"); return 1; } size--; } } return 0;}// write many bytes using the target monitorint FlashByteMultiple(tUartHandle serial_handle, UINT32 addr, UINT32 size, UINT8* pBuffer){ UINT8 send, received; // send the address command send = ADDRESS; UartWrite(serial_handle, &send, 1); // transmit the address, big endian send = (UINT8)((addr>>24) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)((addr>>16) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)((addr>>8) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)(addr & 0xFF); UartWrite(serial_handle, &send, 1); UartRead(serial_handle, &received, 1); // response if (received != ADDRESS) { printf("Protocol error!\n"); return 1; } while (size) { if (size >= 16) { // we can use a "burst" command send = BYTE_FLASH16; UartWrite(serial_handle, &send, 1); // send the write command UartWrite(serial_handle, pBuffer, 16); // transmit the data UartRead(serial_handle, &received, 1); // response if (received != BYTE_FLASH16) { printf("Protocol error!\n"); return 1; } pBuffer += 16; size -= 16; } else { // use single byte command send = BYTE_FLASH; UartWrite(serial_handle, &send, 1); // send the write command UartWrite(serial_handle, pBuffer++, 1); // transmit the data UartRead(serial_handle, &received, 1); // response if (received != BYTE_FLASH) { printf("Protocol error!\n"); return 1; } size--; } } return 0;}// read a 16bit halfword using the target monitorUINT16 ReadHalfword(tUartHandle serial_handle, UINT32 addr){ UINT8 send; UINT8 received; UINT16 halfword; // send the address command send = ADDRESS; UartWrite(serial_handle, &send, 1); // transmit the address, big endian send = (UINT8)((addr>>24) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)((addr>>16) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)((addr>>8) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)(addr & 0xFF); UartWrite(serial_handle, &send, 1); UartRead(serial_handle, &received, 1); // response if (received != ADDRESS) { printf("Protocol error!\n"); return 1; } // send the read command send = HALFWORD_READ; UartWrite(serial_handle, &send, 1); UartRead(serial_handle, &received, 1); // response halfword = received << 8; // highbyte UartRead(serial_handle, &received, 1); halfword |= received; // lowbyte return halfword;}// write a 16bit halfword using the target monitorint WriteHalfword(tUartHandle serial_handle, UINT32 addr, UINT16 halfword){ UINT8 send; UINT8 received; // send the address command send = ADDRESS; UartWrite(serial_handle, &send, 1); // transmit the address, big endian send = (UINT8)((addr>>24) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)((addr>>16) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)((addr>>8) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)(addr & 0xFF); UartWrite(serial_handle, &send, 1); UartRead(serial_handle, &received, 1); // response if (received != ADDRESS) { printf("Protocol error!\n"); return 1; } // send the write command send = HALFWORD_WRITE; UartWrite(serial_handle, &send, 1); // transmit the data send = halfword >> 8; // highbyte UartWrite(serial_handle, &send, 1); send = halfword & 0xFF; // lowbyte UartWrite(serial_handle, &send, 1); UartRead(serial_handle, &received, 1); // response if (received != HALFWORD_WRITE) { printf("Protocol error!\n"); return 1; } return 0;}// change baudrate using target monitorint SetTargetBaudrate(tUartHandle serial_handle, long lClock, long lBaudrate){ UINT8 send; UINT8 received; UINT8 brr; long lBRR; lBRR = lClock / lBaudrate; lBRR = ((lBRR + 16) / 32) - 1; // with rounding brr = (UINT8)lBRR; // send the command send = BAUDRATE; UartWrite(serial_handle, &send, 1); UartWrite(serial_handle, &brr, 1); // send the BRR value UartRead(serial_handle, &received, 1); // response ack if (received != BAUDRATE) { // bad situation, now we're unclear about the baudrate of the target printf("Protocol error!\n"); return 1; } SLEEP(100); // give it some time to settle // change our baudrate, too UartConfig(serial_handle, lBaudrate, eNOPARITY, eONESTOPBIT, 8); return 0;}// call a subroutine using the target monitorint Execute(tUartHandle serial_handle, UINT32 addr, bool bReturns){ UINT8 send; UINT8 received; // send the address command send = ADDRESS; UartWrite(serial_handle, &send, 1); // transmit the address, big endian send = (UINT8)((addr>>24) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)((addr>>16) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)((addr>>8) & 0xFF); UartWrite(serial_handle, &send, 1); send = (UINT8)(addr & 0xFF); UartWrite(serial_handle, &send, 1); UartRead(serial_handle, &received, 1); // response if (received != ADDRESS) { printf("Protocol error!\n"); return 1; } // send the execute command send = EXECUTE; UartWrite(serial_handle, &send, 1); if (bReturns) { // we expect the call to return control to minimon UartRead(serial_handle, &received, 1); // response if (received != EXECUTE) { printf("Protocol error!\n"); return 1; } } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -