일단.. 사용중인 보드가 UART0가 아닌 UART1을 외부용으로 쓰고 있어서 손을 봐야 했는데
bl_config.h 에서 얘가 원본이고
#define UART_ENABLE_UPDATE #define UART_AUTOBAUD //#define UART_FIXED_BAUDRATE 115200 #define UART_CLOCK_ENABLE SYSCTL_RCGCUART_R0 #define UARTx_BASE UART0_BASE #define UART_RXPIN_CLOCK_ENABLE SYSCTL_RCGCGPIO_R0 #define UART_RXPIN_BASE GPIO_PORTA_BASE #define UART_RXPIN_PCTL 0x1 #define UART_RXPIN_POS 0 #define UART_TXPIN_CLOCK_ENABLE SYSCTL_RCGCGPIO_R0 #define UART_TXPIN_BASE GPIO_PORTA_BASE #define UART_TXPIN_PCTL 0x1 #define UART_TXPIN_POS 1 |
UART1을 쓰려고 한다면 요렇게 6개를 손을 봐주어야 한다.
#define UART_ENABLE_UPDATE //#define UART_AUTOBAUD #define UART_FIXED_BAUDRATE 38400 #define UART_CLOCK_ENABLE SYSCTL_RCGCUART_R1 #define UARTx_BASE UART1_BASE #define UART_RXPIN_CLOCK_ENABLE SYSCTL_RCGCGPIO_R1 #define UART_RXPIN_BASE GPIO_PORTB_BASE #define UART_RXPIN_PCTL 0x1 #define UART_RXPIN_POS 0 #define UART_TXPIN_CLOCK_ENABLE SYSCTL_RCGCGPIO_R1 #define UART_TXPIN_BASE GPIO_PORTB_BASE #define UART_TXPIN_PCTL 0x1 #define UART_TXPIN_POS 1 |
그리고 PORTB의 2번 핀이 485 TXEN으로 했는데
좀 더 테스트를 해봐야겠지만, 38400 에서는 문제없이 PC와 1m 이내 선으로 연결해서는 문제없이 업데이트 된다.
(57600 까지는 성공적인듯.. 115k는 줄여줘도 안되네.. rs485 특성으로 보임)
(Autobaud는 작동을 못하네.. rs485 특성일려나?)
void UARTSend(const uint8_t *pui8Data, uint32_t ui32Size) { // // Transmit the number of bytes requested on the UART port. // GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2, GPIO_PIN_2); Delay(10); while(ui32Size--) { // // Make sure that the transmit FIFO is not full. // while((HWREG(UARTx_BASE + UART_O_FR) & UART_FR_TXFF)) { } // // Send out the next byte. // HWREG(UARTx_BASE + UART_O_DR) = *pui8Data++; } // // Wait until the UART is done transmitting. // UARTFlush(); GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2, 0); Delay(10); } |
LM Flash 에서는 UART로 하고 귀차니즘으로 인해(...)
Autobaud 대신 38400 으로 고정을 했는데
Program탭에서 Program Address Offset만 0x00001000 으로 바꾸어 주면 된다.
LR_IROM 0x00001000 0x00040000 { ER_IROM 0x00001000 0x00040000 { *.o (RESET, +First) * (InRoot$$Sections, +RO) } RW_IRAM 0x20000000 0x00008000 { ;* (vtable, +First) * (+RW, +ZI) } } |
(물론 해당 바이너리는 sct 파일에서 0x00000000을 0x00001000 으로 바꾸고 다시 컴파일 해야 한다)
coocox 라는 녀석을 사용중인데 이녀석은 0x1000이 아니라 0x1 섹터로 옵셋을 잡아주니 잘 쓴다.
옆에 써있듯 4번 섹터가 0x00001000 이니 offset을 0x04로 해주면 될것으로 보인다.
[링크 : http://www.coocox.org/book/coocox/CoFlash/GUI-Mode]
+
38400은 delay 없이도 일단 작동
57600은 delay(10) 있어야 작동
+
머지.. 부트로더 올리고 시리얼로 올린다음은 되는데 그 이후에는 안켜진다 -ㅁ-?
'embeded > Cortex-M4 Ti' 카테고리의 다른 글
c99 inline과 extern (0) | 2018.04.20 |
---|---|
tm4c 부트로더 파일 하나로 만들기 관련 검색중 (0) | 2018.01.03 |
keil linker 옵션 entry (0) | 2017.12.28 |
tivaware bootloader + qs-rgb 테스트 (0) | 2017.12.28 |
tm4c tivaware bootloader 빌드.. (2) | 2017.12.26 |