diff --git a/Project/.vscode/settings.json b/Project/.vscode/settings.json new file mode 100644 index 0000000..ad0cb06 --- /dev/null +++ b/Project/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "files.associations": { + "board_config.h": "c", + "mxc_sys.h": "c", + "mxc_delay.h": "c", + "system_func.h": "c", + "ssd1306_i2c.h": "c", + "font.h": "c" + } +} \ No newline at end of file diff --git a/Project/Application/app_gpio_i2c.c b/Project/Application/app_gpio_i2c.c new file mode 100644 index 0000000..c738eb4 --- /dev/null +++ b/Project/Application/app_gpio_i2c.c @@ -0,0 +1,257 @@ +#include "app_gpio_i2c.h" + + +#define APP_GPIO_I2C_SDA_PORT PORT_0 +#define APP_GPIO_I2C_SDA_PIN PIN_9 +#define APP_GPIO_I2C_SDA_OUTPUT App_Gpio_I2C_Port_Output(APP_GPIO_I2C_SDA_PORT, APP_GPIO_I2C_SDA_PIN) +#define APP_GPIO_I2C_SDA_INPUT App_Gpio_I2C_Port_Input(APP_GPIO_I2C_SDA_PORT, APP_GPIO_I2C_SDA_PIN) +#define APP_GPIO_I2C_SDA_H App_Gpio_I2C_Port_H(APP_GPIO_I2C_SDA_PORT, APP_GPIO_I2C_SDA_PIN) +#define APP_GPIO_I2C_SDA_L App_Gpio_I2C_Port_L(APP_GPIO_I2C_SDA_PORT, APP_GPIO_I2C_SDA_PIN) +#define APP_GPIO_I2C_READ App_Gpio_I2C_Port_Read(APP_GPIO_I2C_SDA_PORT, APP_GPIO_I2C_SDA_PIN) + +#define APP_GPIO_I2C_SCL_PORT PORT_0 +#define APP_GPIO_I2C_SCL_PIN PIN_8 +#define APP_GPIO_I2C_SCL_H App_Gpio_I2C_Port_H(APP_GPIO_I2C_SCL_PORT, APP_GPIO_I2C_SCL_PIN) +#define APP_GPIO_I2C_SCL_L App_Gpio_I2C_Port_L(APP_GPIO_I2C_SCL_PORT, APP_GPIO_I2C_SCL_PIN) + + + + +static void App_Gpio_I2C_Port_Output(uint32_t Port, uint32_t Pin); +static void App_Gpio_I2C_Port_Input(uint32_t Port, uint32_t Pin); +static bool App_Gpio_I2C_Port_Read(uint32_t Port, uint32_t Pin); + +static void App_Gpio_I2C_Port_H(uint32_t Port, uint32_t Pin); +static void App_Gpio_I2C_Port_L(uint32_t Port, uint32_t Pin); +static void App_Gpio_I2C_Delay(void); + + +static uint32_t DelayCount; + + +void App_Gpio_I2C_Initialization(uint32_t Frequency) +{ + SYS_ClockEnable(SYS_PERIPH_CLOCK_GPIO0); + App_Gpio_I2C_Port_Output(APP_GPIO_I2C_SDA_PORT, APP_GPIO_I2C_SDA_PIN); + App_Gpio_I2C_Port_Output(APP_GPIO_I2C_SCL_PORT, APP_GPIO_I2C_SCL_PIN); + + APP_GPIO_I2C_SDA_H; + APP_GPIO_I2C_SCL_H; + + DelayCount = (1000000 / Frequency) + 1; + App_Gpio_I2C_Stop(); +} + + +void App_Gpio_I2C_Start(void) +{ + App_Gpio_I2C_Delay(); + APP_GPIO_I2C_SDA_H; + APP_GPIO_I2C_SCL_H; + App_Gpio_I2C_Delay(); + APP_GPIO_I2C_SDA_L; + App_Gpio_I2C_Delay(); + APP_GPIO_I2C_SCL_L; + App_Gpio_I2C_Delay(); + +} + +bool App_Gpio_I2C_WriteData(uint8_t TxData) +{ + uint8_t i; + bool bRet; + APP_GPIO_I2C_SDA_OUTPUT; + + for(i = 0 ; i < 8 ; i++) + { + if((TxData & 0x80)==0x80) + { + APP_GPIO_I2C_SDA_H; + } + else + { + APP_GPIO_I2C_SDA_L; + } + TxData<<=1; + App_Gpio_I2C_Delay(); + APP_GPIO_I2C_SCL_H; + App_Gpio_I2C_Delay(); + APP_GPIO_I2C_SCL_L; + App_Gpio_I2C_Delay(); + } + APP_GPIO_I2C_SDA_INPUT; + APP_GPIO_I2C_SCL_H; + App_Gpio_I2C_Delay(); + bRet = APP_GPIO_I2C_READ; + App_Gpio_I2C_Delay(); + APP_GPIO_I2C_SCL_L; + + return bRet; +} + +bool App_Gpio_I2C_ReadData(uint8_t* pRxData, bool isAck) +{ + bool bRet; + uint8_t i; + uint8_t Ret = 0x00; + + APP_GPIO_I2C_SDA_INPUT; + + for(i = 0 ; i < 8 ; i++) + { + APP_GPIO_I2C_SCL_H; + App_Gpio_I2C_Delay(); + Ret <<= 1; + if(APP_GPIO_I2C_READ != 0) + { + Ret |= 0x01; + } + APP_GPIO_I2C_SCL_L; + App_Gpio_I2C_Delay(); + } + + APP_GPIO_I2C_SDA_OUTPUT; + + if(isAck == true) + { + APP_GPIO_I2C_SDA_L; + } + else + { + APP_GPIO_I2C_SDA_H; + } + + APP_GPIO_I2C_SCL_H; + App_Gpio_I2C_Delay(); + APP_GPIO_I2C_SCL_L; + App_Gpio_I2C_Delay(); + + return bRet; +} + +void App_Gpio_I2C_Stop(void) +{ + APP_GPIO_I2C_SDA_L; + APP_GPIO_I2C_SDA_OUTPUT; + APP_GPIO_I2C_SDA_L; + App_Gpio_I2C_Delay(); + APP_GPIO_I2C_SCL_H; + App_Gpio_I2C_Delay(); + APP_GPIO_I2C_SDA_H; +} + +bool App_Gpio_I2C_Write(uint8_t Address, uint8_t* pWriteData, uint32_t TxSize) +{ + bool bRet; + uint16_t i; + App_Gpio_I2C_Start(); + bRet = App_Gpio_I2C_WriteData(Address << 1); + + if(bRet == false) + { + App_Gpio_I2C_Stop(); + return false; + } + + for(i = 0 ; i < TxSize ; i++) + { + bRet = App_Gpio_I2C_WriteData(pWriteData[i]); + if(bRet == false) + { + App_Gpio_I2C_Stop(); + return false; + } + } + App_Gpio_I2C_Stop(); + + return bRet; +} + +bool App_Gpio_I2C_Read(uint8_t Address, uint8_t* pReadData, uint32_t RxSize) +{ + bool bRet; + + uint16_t i; + App_Gpio_I2C_Start(); + bRet = App_Gpio_I2C_WriteData((Address << 1) | 1); + if(bRet == false) + { + App_Gpio_I2C_Stop(); + return false; + } + for(i = 0 ; i < RxSize-1 ; i++) + { + bRet = App_Gpio_I2C_ReadData(&pReadData[i], true); + if(bRet == false) + { + App_Gpio_I2C_Stop(); + return false; + } + } + bRet = App_Gpio_I2C_ReadData(&pReadData[i], false); + App_Gpio_I2C_Stop(); + + return bRet; +} + + + + + + + + + +static void App_Gpio_I2C_Port_Output(uint32_t Port, uint32_t Pin) +{ + gpio_cfg_t gpio_out; + + gpio_out.port = Port; + gpio_out.mask = Pin; + gpio_out.pad = GPIO_PAD_NONE; + gpio_out.func = GPIO_FUNC_OUT; + GPIO_Config(&gpio_out); +} + +static void App_Gpio_I2C_Port_Input(uint32_t Port, uint32_t Pin) +{ + gpio_cfg_t gpio_out; + + gpio_out.port = Port; + gpio_out.mask = Pin; + gpio_out.pad = GPIO_PAD_NONE; + gpio_out.func = GPIO_FUNC_IN; + GPIO_Config(&gpio_out); +} + +static void App_Gpio_I2C_Port_H(uint32_t Port, uint32_t Pin) +{ + mxc_gpio_regs_t *gpio = MXC_GPIO_GET_GPIO(Port); + gpio->out_set = Pin; +} + +static void App_Gpio_I2C_Port_L(uint32_t Port, uint32_t Pin) +{ + mxc_gpio_regs_t *gpio = MXC_GPIO_GET_GPIO(Port); + gpio->out_clr = Pin; +} + +static bool App_Gpio_I2C_Port_Read(uint32_t Port, uint32_t Pin) +{ + mxc_gpio_regs_t *gpio = MXC_GPIO_GET_GPIO(Port); + return (gpio->in & Pin) ? false : true; +} + + +static void App_Gpio_I2C_Delay(void) +{ + uint32_t i; + for(i = 0 ; i < DelayCount ; i++) + asm("NOP"); +} + + + + + + diff --git a/Project/Application/app_gpio_i2c.h b/Project/Application/app_gpio_i2c.h new file mode 100644 index 0000000..ec9da02 --- /dev/null +++ b/Project/Application/app_gpio_i2c.h @@ -0,0 +1,15 @@ +/** \file app_gpio_i2c.h */ +#if !defined(APP_GPIO_I2C_H__735764A1_7403_4365_8691_3F84C6129F50__INCLUDED_) +#define APP_GPIO_I2C_H__735764A1_7403_4365_8691_3F84C6129F50__INCLUDED_ + +#include "board_config.h" + +void App_Gpio_I2C_Initialization(uint32_t Frequency); +void App_Gpio_I2C_Start(void); +bool App_Gpio_I2C_WriteData(uint8_t TxData); +bool App_Gpio_I2C_ReadData(uint8_t* pRxData, bool isAck); +void App_Gpio_I2C_Stop(void); +bool App_Gpio_I2C_Write(uint8_t Address, uint8_t* pWriteData, uint32_t TxSize); +bool App_Gpio_I2C_Read(uint8_t Address, uint8_t* pReadData, uint32_t RxSize); + +#endif diff --git a/Project/Application/app_gpio_led.c b/Project/Application/app_gpio_led.c new file mode 100644 index 0000000..9ea58b1 --- /dev/null +++ b/Project/Application/app_gpio_led.c @@ -0,0 +1,126 @@ +#include "app_gpio_led.h" +#include "sw_timer.h" + + + + + + + + + +static void App_Led_Output_Process(void); +static void App_Led_Off(APP_LED_LIST app_led_index); +static void App_Led_On(APP_LED_LIST app_led_index); + + +typedef void (*APP_LED_ON_OFF_FUNC)(APP_LED_LIST gpio_led_index); + + +typedef struct +{ + uint8_t Port; + uint32_t Pin; + gpio_pad_t Pull_updown; + + APP_LED_MODE Mode; + bool isLedOn; + uint32_t nCheckTime; + uint32_t nOnTime; + uint32_t nOffTime; + + APP_LED_ON_OFF_FUNC LedOnFunction; + APP_LED_ON_OFF_FUNC LedOffunction; +}APP_STATE_LED_INFO; + + +static APP_STATE_LED_INFO App_Led_Ctrl_Info[APP_LED_MAX] = +{ + {PORT_0, PIN_13, GPIO_PAD_NONE, APP_LED_MODE_OFF, false, 0, 0, 0, App_Led_On, App_Led_Off}, +}; + + +static void App_Led_On(APP_LED_LIST app_led_index); +static void App_Led_Off(APP_LED_LIST app_led_index); + +void App_Led_Initialization(void) +{ + uint8_t i; + gpio_cfg_t gpio_out; + + SYS_ClockEnable(SYS_PERIPH_CLOCK_GPIO0); + + for(i = 0 ; i < APP_LED_MAX ; i++) + { + gpio_out.port = App_Led_Ctrl_Info[i].Port; + gpio_out.mask = App_Led_Ctrl_Info[i].Pin; + gpio_out.pad = App_Led_Ctrl_Info[i].Pull_updown; + gpio_out.func = GPIO_FUNC_OUT; + GPIO_Config(&gpio_out); + App_Led_Off((APP_LED_LIST)i); + } + + SW_Timer_Callback_Register(SW_TIMER_RUN_CONTINUE, 1, App_Led_Output_Process); +} + + +void App_Led_OutputSet(APP_LED_LIST app_led_index, APP_LED_MODE app_led_mode, uint32_t OnTime, uint32_t OffTime) +{ + App_Led_Ctrl_Info[app_led_index].Mode = app_led_mode; + App_Led_Ctrl_Info[app_led_index].isLedOn = true; + App_Led_Ctrl_Info[app_led_index].nCheckTime = millis(); + App_Led_Ctrl_Info[app_led_index].nOnTime = OnTime; + App_Led_Ctrl_Info[app_led_index].nOffTime = OffTime; +} + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +static void App_Led_Output_Process(void) +{ + uint8_t i; + APP_STATE_LED_INFO* pControlInfo; + for(i = 0 ; i < APP_LED_MAX ; i++) + { + pControlInfo = &App_Led_Ctrl_Info[i]; + switch (pControlInfo->Mode) + { + case APP_LED_MODE_OFF: + pControlInfo->LedOffunction((APP_LED_LIST)i); + break; + case APP_LED_MODE_ON: + pControlInfo->LedOnFunction((APP_LED_LIST)i); + break; + case APP_LED_MODE_TOGGLE: + if(pControlInfo->isLedOn == true) + { + if((millis() - pControlInfo->nCheckTime) > pControlInfo->nOnTime ) + { + pControlInfo->nCheckTime = millis(); + pControlInfo->isLedOn = false; + } + pControlInfo->LedOnFunction((APP_LED_LIST)i); + } + else + { + if((millis() - pControlInfo->nCheckTime) > pControlInfo->nOffTime ) + { + pControlInfo->nCheckTime = millis(); + pControlInfo->isLedOn = true; + } + pControlInfo->LedOffunction((APP_LED_LIST)i); + } + break; + } + } +} + +static void App_Led_On(APP_LED_LIST app_led_index) +{ + mxc_gpio_regs_t *gpio = MXC_GPIO_GET_GPIO(App_Led_Ctrl_Info[app_led_index].Port); + gpio->out_set = App_Led_Ctrl_Info[app_led_index].Pin; +} + +static void App_Led_Off(APP_LED_LIST app_led_index) +{ + mxc_gpio_regs_t *gpio = MXC_GPIO_GET_GPIO(App_Led_Ctrl_Info[app_led_index].Port); + gpio->out_clr = App_Led_Ctrl_Info[app_led_index].Pin; +} diff --git a/Project/Application/app_gpio_led.h b/Project/Application/app_gpio_led.h new file mode 100644 index 0000000..61fe785 --- /dev/null +++ b/Project/Application/app_gpio_led.h @@ -0,0 +1,27 @@ +/** \file app_gpio_led.h */ +#if !defined(APP_GPIO_LED_H__2317E4D0_AD00_4A5E_A3DE_D2D8A0546351__INCLUDED_) +#define APP_GPIO_LED_H__2317E4D0_AD00_4A5E_A3DE_D2D8A0546351__INCLUDED_ + +#include "board_config.h" + + + + +typedef enum +{ + APP_LED_1, + APP_LED_MAX, +}APP_LED_LIST; + +typedef enum +{ + APP_LED_MODE_OFF, + APP_LED_MODE_ON, + APP_LED_MODE_TOGGLE, +}APP_LED_MODE; + + +void App_Led_Initialization(void); +void App_Led_OutputSet(APP_LED_LIST app_led_index, APP_LED_MODE app_led_mode, uint32_t OnTime, uint32_t OffTime); + +#endif diff --git a/Project/Application/app_ring_buffer.c b/Project/Application/app_ring_buffer.c new file mode 100644 index 0000000..79f6886 --- /dev/null +++ b/Project/Application/app_ring_buffer.c @@ -0,0 +1,114 @@ +#include "app_ring_buffer.h" + +// 큐 초기화 +bool RingBuffer_Initialization(RING_BUFFER* pRingbuffer, bool isOverWrite, uint32_t buffer_size, uint8_t* pBuffer) +{ + if(buffer_size == 0 || pRingbuffer == NULL || pBuffer == NULL) + return false; + pRingbuffer->pBuffer = pBuffer; + pRingbuffer->BufferSize = buffer_size; + pRingbuffer->isOverWrite = isOverWrite; + pRingbuffer->front = -1; + pRingbuffer->rear = -1; + return true; +} + +bool RingBuffer_Clear(RING_BUFFER* pRingbuffer) +{ + if(pRingbuffer == NULL || pRingbuffer->BufferSize == 0 || pRingbuffer->pBuffer == NULL) + return false; + + pRingbuffer->front = -1; + pRingbuffer->rear = -1; + return true; +} + +bool RingBuffer_isEmpty(RING_BUFFER* pRingbuffer) +{ + return (pRingbuffer->front == -1); +} + +bool RingBuffer_isFull(RING_BUFFER* pRingbuffer) +{ + return ((pRingbuffer->front == 0 && pRingbuffer->rear == (pRingbuffer->BufferSize - 1)) || (pRingbuffer->front == (pRingbuffer->rear + 1))); +} +// 큐에 요소를 추가 (enqueue) +bool RingBuffer_Enqueue(RING_BUFFER* pRingbuffer, uint8_t value) +{ + uint8_t temp; + if (RingBuffer_isFull(pRingbuffer)) + { + if(pRingbuffer->isOverWrite == false) + return false; + else + RingBuffer_Dequeue(pRingbuffer, &temp); + } + + if (pRingbuffer->front == -1) + { + pRingbuffer->front = 0; + } + pRingbuffer->rear = (pRingbuffer->rear + 1) % pRingbuffer->BufferSize; + pRingbuffer->pBuffer[pRingbuffer->rear] = value; + return true; + +} + +// 큐에서 요소를 제거하고 반환 (dequeue) +bool RingBuffer_Dequeue(RING_BUFFER* pRingbuffer, uint8_t* pRetValue) +{ + if (RingBuffer_isEmpty(pRingbuffer)) + { + return false; + } + else + { + *pRetValue = pRingbuffer->pBuffer[pRingbuffer->front]; + if (pRingbuffer->front == pRingbuffer->rear) + { + pRingbuffer->front = -1; + pRingbuffer->rear = -1; + } + else + { + pRingbuffer->front = (pRingbuffer->front + 1) % pRingbuffer->BufferSize; + } + return true; + } +} + +bool RingBuffer_GetData(RING_BUFFER* pRingbuffer, uint8_t* pRetValue) +{ + *pRetValue = pRingbuffer->pBuffer[pRingbuffer->front]; + return true; +} + +bool RingBuffer_PopData(RING_BUFFER* pRingbuffer) +{ + if (pRingbuffer->front == pRingbuffer->rear) + { + pRingbuffer->front = -1; + pRingbuffer->rear = -1; + } + else + { + pRingbuffer->front = (pRingbuffer->front + 1) % pRingbuffer->BufferSize; + } + return true; +} + +uint32_t RingBuffer_Get_DataSize(RING_BUFFER* pRingbuffer) +{ + if (RingBuffer_isEmpty(pRingbuffer)) + { + return 0; + } + else if (pRingbuffer->front <= pRingbuffer->rear) + { + return (pRingbuffer->rear - pRingbuffer->front + 1); + } + else + { + return (pRingbuffer->BufferSize - pRingbuffer->front + pRingbuffer->rear + 1); + } +} diff --git a/Project/Application/app_ring_buffer.h b/Project/Application/app_ring_buffer.h new file mode 100644 index 0000000..e6b152e --- /dev/null +++ b/Project/Application/app_ring_buffer.h @@ -0,0 +1,28 @@ +/** \file ring_buffer.h */ +#if !defined(APP_RING_BUFFER_H__002F3B3E_9C40_4947_A8EE_139D5ADFF045__INCLUDED_) +#define APP_RING_BUFFER_H__002F3B3E_9C40_4947_A8EE_139D5ADFF045__INCLUDED_ + +#include "define.h" +#include "board_config.h" + + +typedef struct ring_buffer +{ + uint8_t* pBuffer; + uint32_t BufferSize; + bool isOverWrite; + int32_t front, rear; +}RING_BUFFER; + +bool RingBuffer_Initialization(RING_BUFFER* pRingbuffer, bool isOverWrite, uint32_t buffer_size, uint8_t* pBuffer); +bool RingBuffer_Clear(RING_BUFFER* pRingbuffer); +bool RingBuffer_isEmpty(RING_BUFFER* pRingbuffer); +bool RingBuffer_isFull(RING_BUFFER* pRingbuffer); +bool RingBuffer_Enqueue(RING_BUFFER* pRingbuffer, uint8_t value) ; +bool RingBuffer_Dequeue(RING_BUFFER* pRingbuffer, uint8_t* pRetValue); +bool RingBuffer_GetData(RING_BUFFER* pRingbuffer, uint8_t* pRetValue); +bool RingBuffer_PopData(RING_BUFFER* pRingbuffer); +uint32_t RingBuffer_Get_DataSize(RING_BUFFER* pRingbuffer); + + +#endif diff --git a/Project/Application/app_uart.c b/Project/Application/app_uart.c new file mode 100644 index 0000000..5ee75d8 --- /dev/null +++ b/Project/Application/app_uart.c @@ -0,0 +1,159 @@ +#include "app_uart.h" +#include "app_ring_buffer.h" +#include "sw_timer.h" + + + +static uart_req_t App_Uart_Read_Req;; + + +static uint8_t TxBuffer[APP_UART_TX_BUFFER_SIZE]; +static uint8_t RxBuffer[APP_UART_RX_BUFFER_SIZE]; +static uint8_t RxData; + +static RING_BUFFER Tx_RingBuffer; +static RING_BUFFER Rx_RingBuffer; +static int32_t UartError = E_NO_ERROR; + + + + +static void App_Uart_Interrupt_Handler(void); +static void App_Uart_Data_Transmit_Check(void); +static void App_Uart_Read_Callback_Initialization(void); +static void App_Uart_Read_Callback(uart_req_t* req, int error); + + +int fputc( int ch, FILE* f ) +{ + RingBuffer_Enqueue(&Tx_RingBuffer, ch); + //UART_WriteByte(UART_App_INSTANCE, ch); + return( ch ); +} + + + + + +int32_t App_Uart_Initialization(void) +{ + mxc_uart_regs_t* uart = APP_UART_INSTANCE; + const sys_cfg_uart_t sys_uart_cfg = + { + APP_UART_ALTERNATE, + UART_FLOW_DISABLE, + }; + + + /* Initialize the UART */ + uart_cfg_t cfg; + cfg.parity = UART_PARITY_DISABLE; + cfg.size = UART_DATA_SIZE_8_BITS; + cfg.stop = UART_STOP_1; + cfg.flow = UART_FLOW_CTRL_DIS; + cfg.pol = UART_FLOW_POL_DIS; + cfg.baud = APP_UART_BUADRATE; + + while (!(uart->status & MXC_F_UART_STATUS_TX_EMPTY)) + { + ; + } + + // Initialize the UART + if ((UartError = UART_Init(uart, &cfg, &sys_uart_cfg)) != E_NO_ERROR) + { + return UartError; + } + + if(uart == MXC_UART0) + { + NVIC_ClearPendingIRQ(UART0_IRQn); + NVIC_DisableIRQ(UART0_IRQn); + NVIC_SetVector(UART0_IRQn, App_Uart_Interrupt_Handler); + NVIC_EnableIRQ(UART0_IRQn); + } + else if(uart == MXC_UART1) + { + NVIC_ClearPendingIRQ(UART1_IRQn); + NVIC_DisableIRQ(UART1_IRQn); + NVIC_SetVector(UART1_IRQn, App_Uart_Interrupt_Handler); + NVIC_EnableIRQ(UART1_IRQn); + } + + UART_ClearFlags (uart, 0xFFFFFFFF); + //MXC_UART_EnableInt (uart, MXC_F_UART_REVA_INT_EN_RX_FIFO_THRESH|MXC_F_UART_REVA_INT_EN_TX_FIFO_ALMOST_EMPTY); + + RingBuffer_Initialization(&Tx_RingBuffer, true, APP_UART_TX_BUFFER_SIZE, TxBuffer); + RingBuffer_Initialization(&Rx_RingBuffer, true, APP_UART_RX_BUFFER_SIZE, RxBuffer); + + App_Uart_Read_Callback_Initialization(); + + SW_Timer_Callback_Register(SW_TIMER_RUN_CONTINUE, 0, App_Uart_Data_Transmit_Check); + return E_SUCCESS; +} + + +static void App_Uart_Read_Callback_Initialization(void) +{ + App_Uart_Read_Req.data = &RxData; + App_Uart_Read_Req.len = 1; + App_Uart_Read_Req.callback = App_Uart_Read_Callback; + UART_ReadAsync(APP_UART_INSTANCE, &App_Uart_Read_Req); +} + + +void App_Uart_Interrupt_Handler(void) +{ + UART_Handler(APP_UART_INSTANCE); +} + + +static void App_Uart_Read_Callback(uart_req_t* req, int error) +{ + RingBuffer_Enqueue(&Rx_RingBuffer, RxData); + RingBuffer_Enqueue(&Tx_RingBuffer, RxData); + App_Uart_Read_Callback_Initialization(); +} + +static void App_Uart_Data_Transmit_Check(void) +{ + if(RingBuffer_Get_DataSize(&Tx_RingBuffer) != 0 && UART_Busy(APP_UART_INSTANCE) == E_NO_ERROR) + { + uint8_t TxData; + RingBuffer_GetData(&Tx_RingBuffer, &TxData); + UART_WriteByte(APP_UART_INSTANCE, TxData); + RingBuffer_PopData(&Tx_RingBuffer); + } +} + + +int32_t App_Uart_Transmit(uint8_t TxData) +{ + RingBuffer_Enqueue(&Tx_RingBuffer, TxData); + return true; +} + +int32_t App_Uart_Get_Last_Error(void) +{ + return UartError; +} + +bool App_Uart_Get_Recv_Data(uint8_t* pRxData) +{ + if(RingBuffer_Get_DataSize(&Rx_RingBuffer) == 0) + return false; + return RingBuffer_Dequeue(&Rx_RingBuffer, pRxData); +} + +int printf_none(const char *fmt, ...) +{ + return 0; +} + + + + + + + + diff --git a/Project/Application/app_uart.h b/Project/Application/app_uart.h new file mode 100644 index 0000000..21520f5 --- /dev/null +++ b/Project/Application/app_uart.h @@ -0,0 +1,17 @@ +/** \file debug.h */ +#if !defined(APP_UART_H__815DE511_1438_4F94_A151_A4D6CC5F96F8__INCLUDED_) +#define APP_UART_H__815DE511_1438_4F94_A151_A4D6CC5F96F8__INCLUDED_ + +#include "board_config.h" + + +int32_t App_Uart_Initialization(void); +int32_t App_Uart_Transmit(uint8_t TxData); +int32_t App_Uart_Transmit_Len(uint8_t* pTxBuffer, uint16_t TxLen); +int32_t App_Uart_Get_Last_Error(void); +bool App_Uart_Get_Recv_Data(uint8_t* pRxData); + +int printf_none(const char *fmt, ...); + + +#endif diff --git a/Project/Application/board_config.h b/Project/Application/board_config.h index fcf9a52..6dfdbac 100644 --- a/Project/Application/board_config.h +++ b/Project/Application/board_config.h @@ -17,6 +17,7 @@ #include "mxc_errors.h" #include "mxc_sys.h" #include "mxc_delay.h" +#include "nvic_table.h" #include "i2c.h" #include "gpio.h" #include "tmr.h" @@ -29,10 +30,24 @@ #include "define.h" +#include "system_func.h" +#define millis() SystemTimer_Get_TickCount() + +#define SYSTEM_TIMER_INSTANCE MXC_TMR1 + + +////////////////////////////////////////// +// printf use +// +#define APP_UART_INSTANCE MXC_UART1 +#define APP_UART_ALTERNATE MAP_A +#define APP_UART_BUADRATE 115200 +#define APP_UART_TX_BUFFER_SIZE 512 +#define APP_UART_RX_BUFFER_SIZE 128 #endif diff --git a/Project/Application/main.c b/Project/Application/main.c index 8ed6ad5..65fe44f 100644 --- a/Project/Application/main.c +++ b/Project/Application/main.c @@ -1,24 +1,92 @@ #include "main.h" #include "system_func.h" #include "struct.h" +#include "sw_timer.h" +#include "app_gpio_led.h" +#include "app_gpio_i2c.h" +#include "app_uart.h" +#include "ssd1306.h" + + + + + +void Test_Process(void) +{ + static uint32_t count = 0; + uint8_t temp[100]; + SSD1306_SetPosition (7, 1); // set position + sprintf(temp, "count = %d", count++); + SSD1306_DrawString (temp); // draw string + SSD1306_UpdateScreen (SSD1306_ADDR); // update + //printf("12345678\r\n"); +} int main(void) { - SystemCoreClockSet(HIRC_24MHZ); + uint8_t i; ICC_Enable(); - + SystemCoreClockSet(HIRC_96MHZ); + + App_Uart_Initialization(); + App_Gpio_I2C_Initialization(200000); + App_Led_Initialization(); - - + __enable_irq(); + App_Led_OutputSet(APP_LED_1, APP_LED_MODE_TOGGLE, 100, 100); + SW_Timer_Callback_Register(SW_TIMER_RUN_CONTINUE, 100,Test_Process ); - while(1) + + if(SSD1306_Init(SSD1306_ADDR) != SSD1306_SUCCESS) { + printf("ssd1306 init fail\r\n"); + } + else + { + SSD1306_NormalScreen (SSD1306_ADDR); + SSD1306_ClearScreen (); // clear screen + SSD1306_DrawLine (0, MAX_X, 4, 4); // draw line + SSD1306_SetPosition (7, 1); // set position + SSD1306_DrawString ("SSD1306 OLED DRIVER"); // draw string + SSD1306_DrawLine (0, MAX_X, 18, 18); // draw line + SSD1306_SetPosition (40, 3); // set position + SSD1306_DrawString ("MATIASUS"); // draw string + //SSD1306_SetPosition (53, 5); // set position + //SSD1306_DrawString ("2021"); // draw string + SSD1306_UpdateScreen (SSD1306_ADDR); // update + + Delay_ms (1000); + SSD1306_InverseScreen (SSD1306_ADDR); + + Delay_ms (1000); + + SSD1306_NormalScreen (SSD1306_ADDR); + + #if 0 + Delay_ms (1000); + SSD1306_InverseScreen (SSD1306_ADDR); + + Delay_ms (1000); + + SSD1306_NormalScreen (SSD1306_ADDR); + + Delay_ms (1000); + SSD1306_InverseScreen (SSD1306_ADDR); + + Delay_ms (1000); + + SSD1306_NormalScreen (SSD1306_ADDR); + #endif + } + while(1) + { + SW_Timer_Callback_Process(); } return 0; diff --git a/Project/Application/oled_ssd1306/font.h b/Project/Application/oled_ssd1306/font.h new file mode 100644 index 0000000..70d168c --- /dev/null +++ b/Project/Application/oled_ssd1306/font.h @@ -0,0 +1,134 @@ +/** + * -------------------------------------------------------------------------------------+ + * @desc LCD FONT 5x8 + * -------------------------------------------------------------------------------------+ + * @source + * Copyright (C) 2020 Marian Hrinko. + * Written by Marian Hrinko (mato.hrinko@gmail.com) + * + * @author Marian Hrinko + * @date 08.12.2020 + * @update 08.12.2022 + * @file font.h + * @version 1.0 + * @tested AVR Atmega328p + * + * @depend + * -------------------------------------------------------------------------------------+ + * @descr LCD pixel fonts + * -------------------------------------------------------------------------------------+ + * @usage Display characters + */ + +#ifndef __FONT_H__ +#define __FONT_H__ + + // includes + + + // Characters definition + // ----------------------------------- + // number of columns for chars + #define CHARS_COLS_LENGTH 5 + + // @const Characters + const uint8_t FONTS[][CHARS_COLS_LENGTH] = { + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 20 space + { 0x81, 0x81, 0x18, 0x81, 0x81 }, // 21 ! + { 0x00, 0x07, 0x00, 0x07, 0x00 }, // 22 " + { 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // 23 # + { 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // 24 $ + { 0x23, 0x13, 0x08, 0x64, 0x62 }, // 25 % + { 0x36, 0x49, 0x55, 0x22, 0x50 }, // 26 & + { 0x00, 0x05, 0x03, 0x00, 0x00 }, // 27 ' + { 0x00, 0x1c, 0x22, 0x41, 0x00 }, // 28 ( + { 0x00, 0x41, 0x22, 0x1c, 0x00 }, // 29 ) + { 0x14, 0x08, 0x3e, 0x08, 0x14 }, // 2a * + { 0x08, 0x08, 0x3e, 0x08, 0x08 }, // 2b + + { 0x00, 0x50, 0x30, 0x00, 0x00 }, // 2c , + { 0x08, 0x08, 0x08, 0x08, 0x08 }, // 2d - + { 0x00, 0x60, 0x60, 0x00, 0x00 }, // 2e . + { 0x20, 0x10, 0x08, 0x04, 0x02 }, // 2f / + { 0x3e, 0x51, 0x49, 0x45, 0x3e }, // 30 0 + { 0x00, 0x42, 0x7f, 0x40, 0x00 }, // 31 1 + { 0x42, 0x61, 0x51, 0x49, 0x46 }, // 32 2 + { 0x21, 0x41, 0x45, 0x4b, 0x31 }, // 33 3 + { 0x18, 0x14, 0x12, 0x7f, 0x10 }, // 34 4 + { 0x27, 0x45, 0x45, 0x45, 0x39 }, // 35 5 + { 0x3c, 0x4a, 0x49, 0x49, 0x30 }, // 36 6 + { 0x01, 0x71, 0x09, 0x05, 0x03 }, // 37 7 + { 0x36, 0x49, 0x49, 0x49, 0x36 }, // 38 8 + { 0x06, 0x49, 0x49, 0x29, 0x1e }, // 39 9 + { 0x00, 0x36, 0x36, 0x00, 0x00 }, // 3a : + { 0x00, 0x56, 0x36, 0x00, 0x00 }, // 3b ; + { 0x08, 0x14, 0x22, 0x41, 0x00 }, // 3c < + { 0x14, 0x14, 0x14, 0x14, 0x14 }, // 3d = + { 0x00, 0x41, 0x22, 0x14, 0x08 }, // 3e > + { 0x02, 0x01, 0x51, 0x09, 0x06 }, // 3f ? + { 0x32, 0x49, 0x79, 0x41, 0x3e }, // 40 @ + { 0x7e, 0x11, 0x11, 0x11, 0x7e }, // 41 A + { 0x7f, 0x49, 0x49, 0x49, 0x36 }, // 42 B + { 0x3e, 0x41, 0x41, 0x41, 0x22 }, // 43 C + { 0x7f, 0x41, 0x41, 0x22, 0x1c }, // 44 D + { 0x7f, 0x49, 0x49, 0x49, 0x41 }, // 45 E + { 0x7f, 0x09, 0x09, 0x09, 0x01 }, // 46 F + { 0x3e, 0x41, 0x49, 0x49, 0x7a }, // 47 G + { 0x7f, 0x08, 0x08, 0x08, 0x7f }, // 48 H + { 0x00, 0x41, 0x7f, 0x41, 0x00 }, // 49 I + { 0x20, 0x40, 0x41, 0x3f, 0x01 }, // 4a J + { 0x7f, 0x08, 0x14, 0x22, 0x41 }, // 4b K + { 0x7f, 0x40, 0x40, 0x40, 0x40 }, // 4c L + { 0x7f, 0x02, 0x0c, 0x02, 0x7f }, // 4d M + { 0x7f, 0x04, 0x08, 0x10, 0x7f }, // 4e N + { 0x3e, 0x41, 0x41, 0x41, 0x3e }, // 4f O + { 0x7f, 0x09, 0x09, 0x09, 0x06 }, // 50 P + { 0x3e, 0x41, 0x51, 0x21, 0x5e }, // 51 Q + { 0x7f, 0x09, 0x19, 0x29, 0x46 }, // 52 R + { 0x46, 0x49, 0x49, 0x49, 0x31 }, // 53 S + { 0x01, 0x01, 0x7f, 0x01, 0x01 }, // 54 T + { 0x3f, 0x40, 0x40, 0x40, 0x3f }, // 55 U + { 0x1f, 0x20, 0x40, 0x20, 0x1f }, // 56 V + { 0x3f, 0x40, 0x38, 0x40, 0x3f }, // 57 W + { 0x63, 0x14, 0x08, 0x14, 0x63 }, // 58 X + { 0x07, 0x08, 0x70, 0x08, 0x07 }, // 59 Y + { 0x61, 0x51, 0x49, 0x45, 0x43 }, // 5a Z + { 0x00, 0x7f, 0x41, 0x41, 0x00 }, // 5b [ + { 0x02, 0x04, 0x08, 0x10, 0x20 }, // 5c backslash + { 0x00, 0x41, 0x41, 0x7f, 0x00 }, // 5d ] + { 0x04, 0x02, 0x01, 0x02, 0x04 }, // 5e ^ + { 0x40, 0x40, 0x40, 0x40, 0x40 }, // 5f _ + { 0x00, 0x01, 0x02, 0x04, 0x00 }, // 60 ` + { 0x20, 0x54, 0x54, 0x54, 0x78 }, // 61 a + { 0x7f, 0x48, 0x44, 0x44, 0x38 }, // 62 b + { 0x38, 0x44, 0x44, 0x44, 0x20 }, // 63 c + { 0x38, 0x44, 0x44, 0x48, 0x7f }, // 64 d + { 0x38, 0x54, 0x54, 0x54, 0x18 }, // 65 e + { 0x08, 0x7e, 0x09, 0x01, 0x02 }, // 66 f + { 0x0c, 0x52, 0x52, 0x52, 0x3e }, // 67 g + { 0x7f, 0x08, 0x04, 0x04, 0x78 }, // 68 h + { 0x00, 0x44, 0x7d, 0x40, 0x00 }, // 69 i + { 0x20, 0x40, 0x44, 0x3d, 0x00 }, // 6a j + { 0x7f, 0x10, 0x28, 0x44, 0x00 }, // 6b k + { 0x00, 0x41, 0x7f, 0x40, 0x00 }, // 6c l + { 0x7c, 0x04, 0x18, 0x04, 0x78 }, // 6d m + { 0x7c, 0x08, 0x04, 0x04, 0x78 }, // 6e n + { 0x38, 0x44, 0x44, 0x44, 0x38 }, // 6f o + { 0x7c, 0x14, 0x14, 0x14, 0x08 }, // 70 p + { 0x08, 0x14, 0x14, 0x14, 0x7c }, // 71 q + { 0x7c, 0x08, 0x04, 0x04, 0x08 }, // 72 r + { 0x48, 0x54, 0x54, 0x54, 0x20 }, // 73 s + { 0x04, 0x3f, 0x44, 0x40, 0x20 }, // 74 t + { 0x3c, 0x40, 0x40, 0x20, 0x7c }, // 75 u + { 0x1c, 0x20, 0x40, 0x20, 0x1c }, // 76 v + { 0x3c, 0x40, 0x30, 0x40, 0x3c }, // 77 w + { 0x44, 0x28, 0x10, 0x28, 0x44 }, // 78 x + { 0x0c, 0x50, 0x50, 0x50, 0x3c }, // 79 y + { 0x44, 0x64, 0x54, 0x4c, 0x44 }, // 7a z + { 0x00, 0x08, 0x36, 0x41, 0x00 }, // 7b { + { 0x00, 0x00, 0x7f, 0x00, 0x00 }, // 7c | + { 0x00, 0x41, 0x36, 0x08, 0x00 }, // 7d } + { 0x10, 0x08, 0x08, 0x10, 0x08 }, // 7e ~ + { 0x00, 0x00, 0x00, 0x00, 0x00 } // 7f + }; + +#endif diff --git a/Project/Application/oled_ssd1306/font5x8.h b/Project/Application/oled_ssd1306/font5x8.h new file mode 100644 index 0000000..436d4f0 --- /dev/null +++ b/Project/Application/oled_ssd1306/font5x8.h @@ -0,0 +1,135 @@ +/** + * -------------------------------------------------------------------------------------+ + * @desc LCD FONT 5x8 + * -------------------------------------------------------------------------------------+ + * @source https://github.com/basti79/LCD-fonts/blob/master/5x8_vertikal_LSB_1.h + * Copyright (C) 2020 Marian Hrinko. + * Written by Marian Hrinko (mato.hrinko@gmail.com) + * + * @author Marian Hrinko + * @date 08.12.2020 + * @update 08.12.2022 + * @file font5x8.h + * @version 1.0 + * @tested AVR Atmega328p + * + * @depend + * -------------------------------------------------------------------------------------+ + * @descr LCD pixel fonts + * -------------------------------------------------------------------------------------+ + * @usage Display characters + */ + +#ifndef __FONT5x8_H__ +#define __FONT5x8_H__ + + // includes + #include + + // Characters definition + // ----------------------------------- + // number of columns for chars + #define CHARS_COLS_LENGTH 5 + + // @author basti79 + // @source https://github.com/basti79/LCD-fonts/blob/master/5x8_vertikal_LSB_1.h + static const uint8_t FONTS[][CHARS_COLS_LENGTH] PROGMEM = { + {0x00,0x00,0x00,0x00,0x00}, // 0x20 + {0x00,0x00,0x2F,0x00,0x00}, // 0x21 + {0x00,0x03,0x00,0x03,0x00}, // 0x22 + {0x34,0x1C,0x36,0x1C,0x16}, // 0x23 + {0x00,0x26,0x7F,0x32,0x00}, // 0x24 + {0x32,0x0D,0x1E,0x2C,0x13}, // 0x25 + {0x18,0x26,0x2D,0x12,0x28}, // 0x26 + {0x00,0x00,0x03,0x00,0x00}, // 0x27 + {0x00,0x1C,0x22,0x41,0x41}, // 0x28 + {0x41,0x41,0x22,0x1C,0x00}, // 0x29 + {0x00,0x0A,0x05,0x0A,0x00}, // 0x2A + {0x00,0x10,0x38,0x10,0x00}, // 0x2B + {0x00,0x80,0x60,0x00,0x00}, // 0x2C + {0x00,0x08,0x08,0x08,0x00}, // 0x2D + {0x00,0x00,0x20,0x00,0x00}, // 0x2E + {0x00,0x60,0x18,0x06,0x01}, // 0x2F + {0x00,0x1E,0x21,0x21,0x1E}, // 0x30 + {0x00,0x22,0x3F,0x20,0x00}, // 0x31 + {0x00,0x31,0x29,0x26,0x00}, // 0x32 + {0x00,0x25,0x25,0x1A,0x00}, // 0x33 + {0x00,0x0C,0x0A,0x3F,0x08}, // 0x34 + {0x00,0x27,0x25,0x19,0x00}, // 0x35 + {0x00,0x1E,0x25,0x25,0x18}, // 0x36 + {0x00,0x01,0x39,0x05,0x03}, // 0x37 + {0x00,0x1A,0x25,0x25,0x1A}, // 0x38 + {0x00,0x06,0x29,0x29,0x1E}, // 0x39 + {0x00,0x00,0x24,0x00,0x00}, // 0x3A + {0x00,0x80,0x64,0x00,0x00}, // 0x3B + {0x00,0x08,0x08,0x14,0x22}, // 0x3C + {0x00,0x14,0x14,0x14,0x14}, // 0x3D + {0x00,0x22,0x14,0x08,0x08}, // 0x3E + {0x00,0x01,0x29,0x05,0x02}, // 0x3F + {0x3C,0x42,0x59,0x55,0x5E}, // 0x40 + {0x30,0x1C,0x12,0x1C,0x30}, // 0x41 + {0x00,0x3E,0x2A,0x36,0x00}, // 0x42 + {0x00,0x1C,0x22,0x22,0x22}, // 0x43 + {0x00,0x3E,0x22,0x22,0x1C}, // 0x44 + {0x00,0x3E,0x2A,0x2A,0x00}, // 0x45 + {0x00,0x3E,0x0A,0x0A,0x00}, // 0x46 + {0x00,0x1C,0x22,0x2A,0x3A}, // 0x47 + {0x00,0x3E,0x08,0x08,0x3E}, // 0x48 + {0x00,0x22,0x3E,0x22,0x00}, // 0x49 + {0x00,0x22,0x22,0x1E,0x00}, // 0x4A + {0x00,0x3E,0x08,0x14,0x22}, // 0x4B + {0x00,0x3E,0x20,0x20,0x20}, // 0x4C + {0x3E,0x04,0x18,0x04,0x3E}, // 0x4D + {0x00,0x3E,0x04,0x08,0x3E}, // 0x4E + {0x1C,0x22,0x22,0x22,0x1C}, // 0x4F + {0x00,0x3E,0x0A,0x0A,0x04}, // 0x50 + {0x1C,0x22,0x22,0x62,0x9C}, // 0x51 + {0x00,0x3E,0x0A,0x14,0x20}, // 0x52 + {0x00,0x24,0x2A,0x12,0x00}, // 0x53 + {0x02,0x02,0x3E,0x02,0x02}, // 0x54 + {0x00,0x1E,0x20,0x20,0x1E}, // 0x55 + {0x00,0x0E,0x30,0x30,0x0E}, // 0x56 + {0x0E,0x30,0x0C,0x30,0x0E}, // 0x57 + {0x22,0x14,0x08,0x14,0x22}, // 0x58 + {0x02,0x04,0x38,0x04,0x02}, // 0x59 + {0x00,0x32,0x2A,0x2A,0x26}, // 0x5A + {0x00,0x00,0x7F,0x41,0x00}, // 0x5B + {0x01,0x06,0x18,0x60,0x00}, // 0x5C + {0x00,0x41,0x7F,0x00,0x00}, // 0x5D + {0x18,0x06,0x01,0x06,0x18}, // 0x5E + {0x40,0x40,0x40,0x40,0x40}, // 0x5F + {0x00,0x01,0x02,0x00,0x00}, // 0x60 + {0x00,0x34,0x34,0x38,0x20}, // 0x61 + {0x00,0x3F,0x24,0x24,0x18}, // 0x62 + {0x00,0x18,0x24,0x24,0x00}, // 0x63 + {0x18,0x24,0x24,0x3F,0x00}, // 0x64 + {0x00,0x18,0x2C,0x28,0x00}, // 0x65 + {0x00,0x04,0x3E,0x05,0x05}, // 0x66 + {0x00,0x58,0x54,0x54,0x3C}, // 0x67 + {0x00,0x3F,0x08,0x04,0x38}, // 0x68 + {0x00,0x04,0x3D,0x00,0x00}, // 0x69 + {0x00,0x44,0x44,0x3D,0x00}, // 0x6A + {0x00,0x3F,0x08,0x14,0x20}, // 0x6B + {0x00,0x01,0x3F,0x00,0x00}, // 0x6C + {0x3C,0x08,0x3C,0x08,0x3C}, // 0x6D + {0x00,0x3C,0x08,0x04,0x38}, // 0x6E + {0x00,0x18,0x24,0x24,0x18}, // 0x6F + {0x00,0x7C,0x24,0x24,0x18}, // 0x70 + {0x18,0x24,0x24,0x7C,0x00}, // 0x71 + {0x00,0x3C,0x08,0x04,0x00}, // 0x72 + {0x00,0x28,0x2C,0x14,0x00}, // 0x73 + {0x00,0x04,0x1E,0x24,0x04}, // 0x74 + {0x00,0x1C,0x20,0x10,0x3C}, // 0x75 + {0x00,0x0C,0x30,0x30,0x0C}, // 0x76 + {0x0C,0x30,0x1C,0x30,0x0C}, // 0x77 + {0x00,0x24,0x18,0x18,0x24}, // 0x78 + {0x40,0x4C,0x70,0x30,0x0C}, // 0x79 + {0x00,0x34,0x2C,0x2C,0x00}, // 0x7A + {0x00,0x08,0x36,0x41,0x00}, // 0x7B + {0x00,0x00,0x7F,0x00,0x00}, // 0x7C + {0x00,0x41,0x36,0x08,0x00}, // 0x7D + {0x10,0x08,0x08,0x10,0x08}, // 0x7E + {0x00,0x3C,0x22,0x3C,0x00}, // 0x7F + }; + +#endif diff --git a/Project/Application/oled_ssd1306/font6x8.h b/Project/Application/oled_ssd1306/font6x8.h new file mode 100644 index 0000000..c1c49f3 --- /dev/null +++ b/Project/Application/oled_ssd1306/font6x8.h @@ -0,0 +1,135 @@ +/** + * -------------------------------------------------------------------------------------+ + * @desc LCD FONT 6x8 + * -------------------------------------------------------------------------------------+ + * @source https://github.com/basti79/LCD-fonts/blob/master/6x8_vertikal_LSB_1.h + * Copyright (C) 2020 Marian Hrinko. + * Written by Marian Hrinko (mato.hrinko@gmail.com) + * + * @author Marian Hrinko + * @date 08.12.2020 + * @update 08.12.2022 + * @file font6x8.h + * @version 1.0 + * @tested AVR Atmega328p + * + * @depend + * -------------------------------------------------------------------------------------+ + * @descr LCD pixel fonts + * -------------------------------------------------------------------------------------+ + * @usage Display characters + */ + +#ifndef __FONT6x8_H__ +#define __FONT6x8_H__ + + // includes + #include + + // Characters definition + // ----------------------------------- + // number of columns for chars + #define CHARS_COLS_LENGTH 6 + + // @author basti79 + // @source https://github.com/basti79/LCD-fonts/blob/master/6x8_vertikal_LSB_1.h + static const uint8_t FONTS[][CHARS_COLS_LENGTH] PROGMEM = { + {0x00,0x00,0x00,0x00,0x00,0x00}, // 0x20 + {0x00,0x00,0x06,0x5F,0x06,0x00}, // 0x21 + {0x00,0x07,0x03,0x00,0x07,0x03}, // 0x22 + {0x00,0x24,0x7E,0x24,0x7E,0x24}, // 0x23 + {0x00,0x24,0x2B,0x6A,0x12,0x00}, // 0x24 + {0x00,0x63,0x13,0x08,0x64,0x63}, // 0x25 + {0x00,0x36,0x49,0x56,0x20,0x50}, // 0x26 + {0x00,0x00,0x07,0x03,0x00,0x00}, // 0x27 + {0x00,0x00,0x3E,0x41,0x00,0x00}, // 0x28 + {0x00,0x00,0x41,0x3E,0x00,0x00}, // 0x29 + {0x00,0x08,0x3E,0x1C,0x3E,0x08}, // 0x2A + {0x00,0x08,0x08,0x3E,0x08,0x08}, // 0x2B + {0x00,0x00,0xE0,0x60,0x00,0x00}, // 0x2C + {0x00,0x08,0x08,0x08,0x08,0x08}, // 0x2D + {0x00,0x00,0x60,0x60,0x00,0x00}, // 0x2E + {0x00,0x20,0x10,0x08,0x04,0x02}, // 0x2F + {0x00,0x3E,0x51,0x49,0x45,0x3E}, // 0x30 + {0x00,0x00,0x42,0x7F,0x40,0x00}, // 0x31 + {0x00,0x62,0x51,0x49,0x49,0x46}, // 0x32 + {0x00,0x22,0x49,0x49,0x49,0x36}, // 0x33 + {0x00,0x18,0x14,0x12,0x7F,0x10}, // 0x34 + {0x00,0x2F,0x49,0x49,0x49,0x31}, // 0x35 + {0x00,0x3C,0x4A,0x49,0x49,0x30}, // 0x36 + {0x00,0x01,0x71,0x09,0x05,0x03}, // 0x37 + {0x00,0x36,0x49,0x49,0x49,0x36}, // 0x38 + {0x00,0x06,0x49,0x49,0x29,0x1E}, // 0x39 + {0x00,0x00,0x6C,0x6C,0x00,0x00}, // 0x3A + {0x00,0x00,0xEC,0x6C,0x00,0x00}, // 0x3B + {0x00,0x08,0x14,0x22,0x41,0x00}, // 0x3C + {0x00,0x24,0x24,0x24,0x24,0x24}, // 0x3D + {0x00,0x00,0x41,0x22,0x14,0x08}, // 0x3E + {0x00,0x02,0x01,0x59,0x09,0x06}, // 0x3F + {0x00,0x3E,0x41,0x5D,0x55,0x1E}, // 0x40 + {0x00,0x7E,0x11,0x11,0x11,0x7E}, // 0x41 + {0x00,0x7F,0x49,0x49,0x49,0x36}, // 0x42 + {0x00,0x3E,0x41,0x41,0x41,0x22}, // 0x43 + {0x00,0x7F,0x41,0x41,0x41,0x3E}, // 0x44 + {0x00,0x7F,0x49,0x49,0x49,0x41}, // 0x45 + {0x00,0x7F,0x09,0x09,0x09,0x01}, // 0x46 + {0x00,0x3E,0x41,0x49,0x49,0x7A}, // 0x47 + {0x00,0x7F,0x08,0x08,0x08,0x7F}, // 0x48 + {0x00,0x00,0x41,0x7F,0x41,0x00}, // 0x49 + {0x00,0x30,0x40,0x40,0x40,0x3F}, // 0x4A + {0x00,0x7F,0x08,0x14,0x22,0x41}, // 0x4B + {0x00,0x7F,0x40,0x40,0x40,0x40}, // 0x4C + {0x00,0x7F,0x02,0x04,0x02,0x7F}, // 0x4D + {0x00,0x7F,0x02,0x04,0x08,0x7F}, // 0x4E + {0x00,0x3E,0x41,0x41,0x41,0x3E}, // 0x4F + {0x00,0x7F,0x09,0x09,0x09,0x06}, // 0x50 + {0x00,0x3E,0x41,0x51,0x21,0x5E}, // 0x51 + {0x00,0x7F,0x09,0x09,0x19,0x66}, // 0x52 + {0x00,0x26,0x49,0x49,0x49,0x32}, // 0x53 + {0x00,0x01,0x01,0x7F,0x01,0x01}, // 0x54 + {0x00,0x3F,0x40,0x40,0x40,0x3F}, // 0x55 + {0x00,0x1F,0x20,0x40,0x20,0x1F}, // 0x56 + {0x00,0x3F,0x40,0x3C,0x40,0x3F}, // 0x57 + {0x00,0x63,0x14,0x08,0x14,0x63}, // 0x58 + {0x00,0x07,0x08,0x70,0x08,0x07}, // 0x59 + {0x00,0x71,0x49,0x45,0x43,0x00}, // 0x5A + {0x00,0x00,0x7F,0x41,0x41,0x00}, // 0x5B + {0x00,0x02,0x04,0x08,0x10,0x20}, // 0x5C + {0x00,0x00,0x41,0x41,0x7F,0x00}, // 0x5D + {0x00,0x04,0x02,0x01,0x02,0x04}, // 0x5E + {0x80,0x80,0x80,0x80,0x80,0x80}, // 0x5F + {0x00,0x00,0x03,0x07,0x00,0x00}, // 0x60 + {0x00,0x20,0x54,0x54,0x54,0x78}, // 0x61 + {0x00,0x7F,0x44,0x44,0x44,0x38}, // 0x62 + {0x00,0x38,0x44,0x44,0x44,0x28}, // 0x63 + {0x00,0x38,0x44,0x44,0x44,0x7F}, // 0x64 + {0x00,0x38,0x54,0x54,0x54,0x08}, // 0x65 + {0x00,0x08,0x7E,0x09,0x09,0x00}, // 0x66 + {0x00,0x18,0xA4,0xA4,0xA4,0x7C}, // 0x67 + {0x00,0x7F,0x04,0x04,0x78,0x00}, // 0x68 + {0x00,0x00,0x00,0x7D,0x40,0x00}, // 0x69 + {0x00,0x40,0x80,0x84,0x7D,0x00}, // 0x6A + {0x00,0x7F,0x10,0x28,0x44,0x00}, // 0x6B + {0x00,0x00,0x00,0x7F,0x40,0x00}, // 0x6C + {0x00,0x7C,0x04,0x18,0x04,0x78}, // 0x6D + {0x00,0x7C,0x04,0x04,0x78,0x00}, // 0x6E + {0x00,0x38,0x44,0x44,0x44,0x38}, // 0x6F + {0x00,0xFC,0x44,0x44,0x44,0x38}, // 0x70 + {0x00,0x38,0x44,0x44,0x44,0xFC}, // 0x71 + {0x00,0x44,0x78,0x44,0x04,0x08}, // 0x72 + {0x00,0x08,0x54,0x54,0x54,0x20}, // 0x73 + {0x00,0x04,0x3E,0x44,0x24,0x00}, // 0x74 + {0x00,0x3C,0x40,0x20,0x7C,0x00}, // 0x75 + {0x00,0x1C,0x20,0x40,0x20,0x1C}, // 0x76 + {0x00,0x3C,0x60,0x30,0x60,0x3C}, // 0x77 + {0x00,0x6C,0x10,0x10,0x6C,0x00}, // 0x78 + {0x00,0x9C,0xA0,0x60,0x3C,0x00}, // 0x79 + {0x00,0x64,0x54,0x54,0x4C,0x00}, // 0x7A + {0x00,0x08,0x3E,0x41,0x41,0x00}, // 0x7B + {0x00,0x00,0x00,0x77,0x00,0x00}, // 0x7C + {0x00,0x00,0x41,0x41,0x3E,0x08}, // 0x7D + {0x00,0x02,0x01,0x02,0x01,0x00}, // 0x7E + {0x00,0x3C,0x26,0x23,0x26,0x3C}, // 0x7F + }; + +#endif diff --git a/Project/Application/oled_ssd1306/font8x8.h b/Project/Application/oled_ssd1306/font8x8.h new file mode 100644 index 0000000..07d44b8 --- /dev/null +++ b/Project/Application/oled_ssd1306/font8x8.h @@ -0,0 +1,133 @@ +/** + * -------------------------------------------------------------------------------------+ + * @desc LCD FONT 6x8 + * -------------------------------------------------------------------------------------+ + * @source https://github.com/basti79/LCD-fonts/blob/master/8x8_vertikal_LSB_1.h + * Copyright (C) 2020 Marian Hrinko. + * Written by Marian Hrinko (mato.hrinko@gmail.com) + * + * @author Marian Hrinko + * @date 08.12.2020 + * @update 08.12.2022 + * @file font6x8.h + * @version 1.0 + * @tested AVR Atmega328p + * + * @depend + * -------------------------------------------------------------------------------------+ + * @descr LCD pixel fonts + * -------------------------------------------------------------------------------------+ + * @usage Display characters + */ + +#ifndef __FONT8x8_H__ +#define __FONT8x8_H__ + + + // Characters definition + // ----------------------------------- + // number of columns for chars + #define CHARS_COLS_LENGTH 8 + + // @author basti79 + // @source https://github.com/basti79/LCD-fonts/blob/master/8x8_vertikal_LSB_1.h + static const uint8_t FONTS[][CHARS_COLS_LENGTH] = { + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 0x20 + {0x00,0x06,0x5F,0x5F,0x06,0x00,0x00,0x00}, // 0x21 + {0x00,0x07,0x07,0x00,0x07,0x07,0x00,0x00}, // 0x22 + {0x14,0x7F,0x7F,0x14,0x7F,0x7F,0x14,0x00}, // 0x23 + {0x24,0x2E,0x6B,0x6B,0x3A,0x12,0x00,0x00}, // 0x24 + {0x46,0x66,0x30,0x18,0x0C,0x66,0x62,0x00}, // 0x25 + {0x30,0x7A,0x4F,0x5D,0x37,0x7A,0x48,0x00}, // 0x26 + {0x04,0x07,0x03,0x00,0x00,0x00,0x00,0x00}, // 0x27 + {0x00,0x1C,0x3E,0x63,0x41,0x00,0x00,0x00}, // 0x28 + {0x00,0x41,0x63,0x3E,0x1C,0x00,0x00,0x00}, // 0x29 + {0x08,0x2A,0x3E,0x1C,0x1C,0x3E,0x2A,0x08}, // 0x2A + {0x08,0x08,0x3E,0x3E,0x08,0x08,0x00,0x00}, // 0x2B + {0x00,0xA0,0xE0,0x60,0x00,0x00,0x00,0x00}, // 0x2C + {0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00}, // 0x2D + {0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00}, // 0x2E + {0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00}, // 0x2F + {0x3E,0x7F,0x59,0x4D,0x7F,0x3E,0x00,0x00}, // 0x30 + {0x42,0x42,0x7F,0x7F,0x40,0x40,0x00,0x00}, // 0x31 + {0x62,0x73,0x59,0x49,0x6F,0x66,0x00,0x00}, // 0x32 + {0x22,0x63,0x49,0x49,0x7F,0x36,0x00,0x00}, // 0x33 + {0x18,0x1C,0x16,0x13,0x7F,0x7F,0x10,0x00}, // 0x34 + {0x27,0x67,0x45,0x45,0x7D,0x39,0x00,0x00}, // 0x35 + {0x3C,0x7E,0x4B,0x49,0x79,0x30,0x00,0x00}, // 0x36 + {0x03,0x63,0x71,0x19,0x0F,0x07,0x00,0x00}, // 0x37 + {0x36,0x7F,0x49,0x49,0x7F,0x36,0x00,0x00}, // 0x38 + {0x06,0x4F,0x49,0x69,0x3F,0x1E,0x00,0x00}, // 0x39 + {0x00,0x00,0x6C,0x6C,0x00,0x00,0x00,0x00}, // 0x3A + {0x00,0xA0,0xEC,0x6C,0x00,0x00,0x00,0x00}, // 0x3B + {0x08,0x1C,0x36,0x63,0x41,0x00,0x00,0x00}, // 0x3C + {0x14,0x14,0x14,0x14,0x14,0x14,0x00,0x00}, // 0x3D + {0x00,0x41,0x63,0x36,0x1C,0x08,0x00,0x00}, // 0x3E + {0x02,0x03,0x51,0x59,0x0F,0x06,0x00,0x00}, // 0x3F + {0x3E,0x7F,0x41,0x5D,0x5D,0x1F,0x1E,0x00}, // 0x40 + {0x7C,0x7E,0x13,0x13,0x7E,0x7C,0x00,0x00}, // 0x41 + {0x41,0x7F,0x7F,0x49,0x49,0x7F,0x36,0x00}, // 0x42 + {0x1C,0x3E,0x63,0x41,0x41,0x63,0x22,0x00}, // 0x43 + {0x41,0x7F,0x7F,0x41,0x63,0x7F,0x1C,0x00}, // 0x44 + {0x41,0x7F,0x7F,0x49,0x5D,0x41,0x63,0x00}, // 0x45 + {0x41,0x7F,0x7F,0x49,0x1D,0x01,0x03,0x00}, // 0x46 + {0x1C,0x3E,0x63,0x41,0x51,0x73,0x72,0x00}, // 0x47 + {0x7F,0x7F,0x08,0x08,0x7F,0x7F,0x00,0x00}, // 0x48 + {0x00,0x41,0x7F,0x7F,0x41,0x00,0x00,0x00}, // 0x49 + {0x30,0x70,0x40,0x41,0x7F,0x3F,0x01,0x00}, // 0x4A + {0x41,0x7F,0x7F,0x08,0x1C,0x77,0x63,0x00}, // 0x4B + {0x41,0x7F,0x7F,0x41,0x40,0x60,0x70,0x00}, // 0x4C + {0x7F,0x7F,0x06,0x0C,0x06,0x7F,0x7F,0x00}, // 0x4D + {0x7F,0x7F,0x06,0x0C,0x18,0x7F,0x7F,0x00}, // 0x4E + {0x1C,0x3E,0x63,0x41,0x63,0x3E,0x1C,0x00}, // 0x4F + {0x41,0x7F,0x7F,0x49,0x09,0x0F,0x06,0x00}, // 0x50 + {0x1E,0x3F,0x21,0x71,0x7F,0x5E,0x00,0x00}, // 0x51 + {0x41,0x7F,0x7F,0x19,0x39,0x6F,0x46,0x00}, // 0x52 + {0x26,0x67,0x4D,0x59,0x7B,0x32,0x00,0x00}, // 0x53 + {0x03,0x41,0x7F,0x7F,0x41,0x03,0x00,0x00}, // 0x54 + {0x7F,0x7F,0x40,0x40,0x7F,0x7F,0x00,0x00}, // 0x55 + {0x1F,0x3F,0x60,0x60,0x3F,0x1F,0x00,0x00}, // 0x56 + {0x7F,0x7F,0x30,0x18,0x30,0x7F,0x7F,0x00}, // 0x57 + {0x63,0x77,0x1C,0x08,0x1C,0x77,0x63,0x00}, // 0x58 + {0x07,0x4F,0x78,0x78,0x4F,0x07,0x00,0x00}, // 0x59 + {0x67,0x73,0x59,0x4D,0x47,0x63,0x71,0x00}, // 0x5A + {0x00,0x7F,0x7F,0x41,0x41,0x00,0x00,0x00}, // 0x5B + {0x01,0x03,0x06,0x0C,0x18,0x30,0x60,0x00}, // 0x5C + {0x00,0x41,0x41,0x7F,0x7F,0x00,0x00,0x00}, // 0x5D + {0x08,0x0C,0x06,0x03,0x06,0x0C,0x08,0x00}, // 0x5E + {0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, // 0x5F + {0x00,0x00,0x03,0x07,0x04,0x00,0x00,0x00}, // 0x60 + {0x20,0x74,0x54,0x54,0x3C,0x78,0x40,0x00}, // 0x61 + {0x41,0x3F,0x7F,0x44,0x44,0x7C,0x38,0x00}, // 0x62 + {0x38,0x7C,0x44,0x44,0x6C,0x28,0x00,0x00}, // 0x63 + {0x30,0x78,0x48,0x49,0x3F,0x7F,0x40,0x00}, // 0x64 + {0x38,0x7C,0x54,0x54,0x5C,0x18,0x00,0x00}, // 0x65 + {0x48,0x7E,0x7F,0x49,0x03,0x02,0x00,0x00}, // 0x66 + {0x98,0xBC,0xA4,0xA4,0xF8,0x7C,0x04,0x00}, // 0x67 + {0x41,0x7F,0x7F,0x08,0x04,0x7C,0x78,0x00}, // 0x68 + {0x00,0x44,0x7D,0x7D,0x40,0x00,0x00,0x00}, // 0x69 + {0x40,0xC4,0x84,0xFD,0x7D,0x00,0x00,0x00}, // 0x6A + {0x41,0x7F,0x7F,0x10,0x38,0x6C,0x44,0x00}, // 0x6B + {0x00,0x41,0x7F,0x7F,0x40,0x00,0x00,0x00}, // 0x6C + {0x7C,0x7C,0x0C,0x18,0x0C,0x7C,0x78,0x00}, // 0x6D + {0x7C,0x7C,0x04,0x04,0x7C,0x78,0x00,0x00}, // 0x6E + {0x38,0x7C,0x44,0x44,0x7C,0x38,0x00,0x00}, // 0x6F + {0x84,0xFC,0xF8,0xA4,0x24,0x3C,0x18,0x00}, // 0x70 + {0x18,0x3C,0x24,0xA4,0xF8,0xFC,0x84,0x00}, // 0x71 + {0x44,0x7C,0x78,0x44,0x1C,0x18,0x00,0x00}, // 0x72 + {0x48,0x5C,0x54,0x54,0x74,0x24,0x00,0x00}, // 0x73 + {0x00,0x04,0x3E,0x7F,0x44,0x24,0x00,0x00}, // 0x74 + {0x3C,0x7C,0x40,0x40,0x3C,0x7C,0x40,0x00}, // 0x75 + {0x1C,0x3C,0x60,0x60,0x3C,0x1C,0x00,0x00}, // 0x76 + {0x3C,0x7C,0x60,0x30,0x60,0x7C,0x3C,0x00}, // 0x77 + {0x44,0x6C,0x38,0x10,0x38,0x6C,0x44,0x00}, // 0x78 + {0x9C,0xBC,0xA0,0xA0,0xFC,0x7C,0x00,0x00}, // 0x79 + {0x4C,0x64,0x74,0x5C,0x4C,0x64,0x00,0x00}, // 0x7A + {0x08,0x08,0x3E,0x77,0x41,0x41,0x00,0x00}, // 0x7B + {0x00,0x00,0x00,0x77,0x77,0x00,0x00,0x00}, // 0x7C + {0x41,0x41,0x77,0x3E,0x08,0x08,0x00,0x00}, // 0x7D + {0x02,0x03,0x01,0x03,0x02,0x03,0x01,0x00}, // 0x7E + {0x78,0x7C,0x46,0x43,0x46,0x7C,0x78,0x00}, // 0x7F + }; + +#endif diff --git a/Project/Application/oled_ssd1306/ssd1306.c b/Project/Application/oled_ssd1306/ssd1306.c new file mode 100644 index 0000000..75c4849 --- /dev/null +++ b/Project/Application/oled_ssd1306/ssd1306.c @@ -0,0 +1,1626 @@ +#include "ssd1306.h" +#include "font.h" +//#include "font8x8.h" + +#include "ssd1306_i2c.h" + +// @const List of init commands with arguments by Adafruit +// @link https://github.com/adafruit/Adafruit_SSD1306 +const uint8_t INIT_SSD1306_ADAFRUIT[] = { + 17, // number of initializers + SSD1306_DISPLAY_OFF, 0, // 0xAE / Set Display OFF + SSD1306_SET_OSC_FREQ, 1, 0x80, // 0xD5 / 0x80 => D=1; DCLK = Fosc / D <=> DCLK = Fosc + SSD1306_SET_MUX_RATIO, 1, 0x1F, // 0xA8 / 0x3F (64MUX) for 128 x 64 version + // / 0x1F (32MUX) for 128 x 32 version + SSD1306_DISPLAY_OFFSET, 1, 0x00, // 0xD3 + SSD1306_SET_START_LINE, 0, // 0x40 + SSD1306_SET_CHAR_REG, 1, 0x14, // 0x8D / Enable charge pump during display on + SSD1306_MEMORY_ADDR_MODE, 1, 0x00, // 0x20 / Set Memory Addressing Mode + // 0x00 / Horizontal Addressing Mode + // 0x01 / Vertical Addressing Mode + // 0x02 / Page Addressing Mode (RESET) + SSD1306_SEG_REMAP_OP, 0, // 0xA0 / remap 0xA1 + SSD1306_COM_SCAN_DIR_OP, 0, // 0xC8 + SSD1306_COM_PIN_CONF, 0, 0x02, // 0xDA / 0x12 - Disable COM Left/Right remap, Alternative COM pin configuration + // 0x12 - for 128 x 64 version + // 0x02 - for 128 x 32 version + SSD1306_SET_CONTRAST, 1, 0x8F, // 0x81 / 0x8F - reset value (max 0xFF) + SSD1306_SET_PRECHARGE, 1, 0xc2, // 0xD9 / higher value less blinking + // 0xC2, 1st phase = 2 DCLK, 2nd phase = 13 DCLK + SSD1306_VCOM_DESELECT, 1, 0x40, // 0xDB / Set V COMH Deselect, reset value 0x22 = 0,77xUcc + SSD1306_DIS_ENT_DISP_ON, 0, // 0xA4 + SSD1306_DIS_NORMAL, 0, // 0xA6 + SSD1306_DEACT_SCROLL, 0, // 0x2E + SSD1306_DISPLAY_ON, 0 // 0xAF / Set Display ON +}; + +// @const uint8_t - List of init commands according to datasheet SSD1306 +const uint8_t INIT_SSD1306[] = { + 17, // number of initializers + SSD1306_DISPLAY_OFF, 0, // 0xAE = Set Display OFF + SSD1306_SET_MUX_RATIO, 1, 0x1F, // 0xA8 - 0x3F for 128 x 64 version (64MUX) + // - 0x1F for 128 x 32 version (32MUX) + SSD1306_MEMORY_ADDR_MODE, 1, 0x00, // 0x20 = Set Memory Addressing Mode + // 0x00 - Horizontal Addressing Mode + // 0x01 - Vertical Addressing Mode + // 0x02 - Page Addressing Mode (RESET) + SSD1306_SET_START_LINE, 0, // 0x40 + SSD1306_DISPLAY_OFFSET, 1, 0x00, // 0xD3 + SSD1306_SEG_REMAP_OP, 0, // 0xA0 / remap 0xA1 + SSD1306_COM_SCAN_DIR_OP, 0, // 0xC0 / remap 0xC8 + SSD1306_COM_PIN_CONF, 1, 0x02, // 0xDA, 0x12 - Disable COM Left/Right remap, Alternative COM pin configuration + // 0x12 - for 128 x 64 version + // 0x02 - for 128 x 32 version + SSD1306_SET_CONTRAST, 1, 0x7F, // 0x81, 0x7F - reset value (max 0xFF) + SSD1306_DIS_ENT_DISP_ON, 0, // 0xA4 + SSD1306_DIS_NORMAL, 0, // 0xA6 + SSD1306_SET_OSC_FREQ, 1, 0x80, // 0xD5, 0x80 => D=1; DCLK = Fosc / D <=> DCLK = Fosc + SSD1306_SET_PRECHARGE, 1, 0xc2, // 0xD9, higher value less blinking + // 0xC2, 1st phase = 2 DCLK, 2nd phase = 13 DCLK + SSD1306_VCOM_DESELECT, 1, 0x20, // Set V COMH Deselect, reset value 0x22 = 0,77xUcc + SSD1306_SET_CHAR_REG, 1, 0x14, // 0x8D, Enable charge pump during display on + SSD1306_DEACT_SCROLL, 0, // 0x2E + SSD1306_DISPLAY_ON, 0 // 0xAF = Set Display ON +}; + +unsigned int _counter; +// @var array Chache memory Lcd 8 * 128 = 1024 +static char cacheMemLcd[CACHE_SIZE_MEM]; + +/** + * +------------------------------------------------------------------------------------+ + * |== PRIVATE FUNCTIONS ===============================================================| + * +------------------------------------------------------------------------------------+ + */ + +/** + * @brief SSD1306 Init + * + * @param uint8_t address + * + * @return uint8_t + */ +uint8_t SSD1306_Init (uint8_t address) +{ + const uint8_t * list = INIT_SSD1306; + uint8_t status = INIT_STATUS; // init status + uint8_t arguments; + uint8_t commands = *list++; + uint8_t writedata; + + + + status = SSD1306_Send_StartAndSLAW (address); + if (SSD1306_SUCCESS != status) { + return status; + } + + while (commands--) { + // Command + // ----------------------------------------------------------------------------------- + writedata = *list++; + status = SSD1306_Send_Command (writedata); + if (SSD1306_SUCCESS != status){ + return status; + } + // Arguments + // ----------------------------------------------------------------------------------- + //arguments = pgm_read_byte (list++); + arguments = *list++;; + + while (arguments--) { + writedata = *list++; + status = SSD1306_Send_Command (writedata); // argument + + if (SSD1306_SUCCESS != status) { + return status; + } + } + } + TWI_Stop (); + + return SSD1306_SUCCESS; +} + +/** + * @brief SSD1306 Send Start and SLAW request + * + * @param uint8_t + * + * @return uint8_t + */ +uint8_t SSD1306_Send_StartAndSLAW (uint8_t address) +{ + uint8_t status = INIT_STATUS; + + status = TWI_MT_Start (); + if (SSD1306_SUCCESS != status) + { + TWI_Stop(); + return status; + } + // TWI: send SLAW + // ------------------------------------------------------------------------------------- + status = TWI_MT_Send_SLAW (address); + if (SSD1306_SUCCESS != status) + { + TWI_Stop(); + return status; + } + return SSD1306_SUCCESS; +} + +/** + * @brief SSD1306 Send command + * + * @param uint8_t command + * + * @return uint8_t + */ +uint8_t SSD1306_Send_Command (uint8_t command) +{ + + uint8_t status = INIT_STATUS; + + // send control byte + // ------------------------------------------------------------------------------------- + status = TWI_MT_Send_Data (SSD1306_COMMAND); + if (SSD1306_SUCCESS != status) + { + TWI_Stop(); + return status; + } + // send command + // ------------------------------------------------------------------------------------- + status = TWI_MT_Send_Data (command); + if (SSD1306_SUCCESS != status) + { + TWI_Stop(); + return status; + } + + return SSD1306_SUCCESS; +} + +/** + * +------------------------------------------------------------------------------------+ + * |== PUBLIC FUNCTIONS ================================================================| + * +------------------------------------------------------------------------------------+ + */ + +/** + * @brief SSD1306 Normal colors + * + * @param uint8_t address + * + * @return uint8_t + */ +uint8_t SSD1306_NormalScreen (uint8_t address) +{ + uint8_t status = INIT_STATUS; + + // TWI: start & SLAW + // ------------------------------------------------------------------------------------- + status = SSD1306_Send_StartAndSLAW (address); + if (SSD1306_SUCCESS != status) + { + TWI_Stop(); + return status; + } + // send command + // ------------------------------------------------------------------------------------- + status = SSD1306_Send_Command (SSD1306_DIS_NORMAL); + if (SSD1306_SUCCESS != status) + { + TWI_Stop(); + return status; + } + // TWI: Stop + // ------------------------------------------------------------------------------------- + TWI_Stop (); + + return SSD1306_SUCCESS; +} + +/** + * @brief SSD1306 Inverse colors + * + * @param uint8_t address + * + * @return uint8_t + */ +uint8_t SSD1306_InverseScreen (uint8_t address) +{ + uint8_t status = INIT_STATUS; + + // TWI: start & SLAW + // ------------------------------------------------------------------------------------- + status = SSD1306_Send_StartAndSLAW (address); + if (SSD1306_SUCCESS != status) + { + TWI_Stop(); + return status; + } + // send command + // ------------------------------------------------------------------------------------- + status = SSD1306_Send_Command (SSD1306_DIS_INVERSE); + if (SSD1306_SUCCESS != status) + { + TWI_Stop(); + return status; + } + // TWI: Stop + // ------------------------------------------------------------------------------------- + TWI_Stop (); + + + return SSD1306_SUCCESS; +} + +/** + * @brief SSD1306 Update screen + * + * @param uint8_t address + * + * @return uint8_t + */ +uint8_t SSD1306_UpdateScreen (uint8_t address) +{ + + uint8_t status = INIT_STATUS; + uint16_t i = 0; + + // TWI: start & SLAW + // ------------------------------------------------------------------------------------- + status = SSD1306_Send_StartAndSLAW (address); + if (SSD1306_SUCCESS != status) + { + TWI_Stop(); + return status; + } + // control byte data stream + // ------------------------------------------------------------------------------------- + status = TWI_MT_Send_Data (SSD1306_DATA_STREAM); + if (SSD1306_SUCCESS != status) + { + TWI_Stop(); + return status; + } + // send cache memory lcd + // ------------------------------------------------------------------------------------- + while (i < CACHE_SIZE_MEM) { + status = TWI_MT_Send_Data (cacheMemLcd[i++]); // send data + if (SSD1306_SUCCESS != status) + { + TWI_Stop(); + return status; + } + } + // stop TWI + // ------------------------------------------------------------------------------------- + TWI_Stop (); + + + return SSD1306_SUCCESS; +} + +/** + * @brief SSD1306 Clear screen + * + * @param void + * + * @return void + */ +void SSD1306_ClearScreen (void) +{ + memset (cacheMemLcd, 0x00, CACHE_SIZE_MEM); // null cache memory lcd +} + +/** + * @brief SSD1306 Set position + * + * @param uint8_t column -> 0 ... 127 + * @param uint8_t page -> 0 ... 7 or 3 + * + * @return void + */ +void SSD1306_SetPosition (uint8_t x, uint8_t y) +{ + _counter = x + (y << 7); // update counter +} + +/** + * @brief SSD1306 Update text poisition - this ensure that character will not be divided at the end of row, + * the whole character will be depicted on the new row + * + * @param void + * + * @return uint8_t + */ +uint8_t SSD1306_UpdatePosition (void) +{ + uint8_t y = _counter >> 7; // y / 8 + uint8_t x = _counter - (y << 7); // y % 8 + uint8_t x_new = x + CHARS_COLS_LENGTH + 1; // x + character length + 1 + + if (x_new > END_COLUMN_ADDR) { // check position + if (y > END_PAGE_ADDR) { // if more than allowable number of pages + return SSD1306_ERROR; // return out of range + } else if (y < (END_PAGE_ADDR-1)) { // if x reach the end but page in range + _counter = ((++y) << 7); // update + } + } + + return SSD1306_SUCCESS; +} + +/** + * @brief SSD1306 Draw character + * + * @param char character + * + * @return uint8_t + */ +uint8_t SSD1306_DrawChar (char character) +{ + uint8_t i = 0; + + if (SSD1306_UpdatePosition () == SSD1306_ERROR) { + return SSD1306_ERROR; + } + while (i < CHARS_COLS_LENGTH) { + cacheMemLcd[_counter++] = FONTS[character-32][i++]; + } + _counter++; + + return SSD1306_SUCCESS; +} + +/** + * @brief SSD1306 Draw String + * + * @param char * string + * + * @return void + */ +void SSD1306_DrawString (char *str) +{ + int i = 0; + while (str[i] != '\0') { + SSD1306_DrawChar (str[i++]); + } +} + +/** + * @brief Draw pixel + * + * @param uint8_t x -> 0 ... MAX_X + * @param uint8_t y -> 0 ... MAX_Y + * + * @return uint8_t + */ +uint8_t SSD1306_DrawPixel (uint8_t x, uint8_t y) +{ + uint8_t page = 0; + uint8_t pixel = 0; + + if ((x > MAX_X) || (y > MAX_Y)) { // if out of range + return SSD1306_ERROR; // out of range + } + page = y >> 3; // find page (y / 8) + pixel = 1 << (y - (page << 3)); // which pixel (y % 8) + _counter = x + (page << 7); // update counter + cacheMemLcd[_counter++] |= pixel; // save pixel + + return SSD1306_SUCCESS; +} + +/** + * @brief Draw line by Bresenham algoritm + * + * @param uint8_t x start position / 0 <= cols <= MAX_X-1 + * @param uint8_t x end position / 0 <= cols <= MAX_X-1 + * @param uint8_t y start position / 0 <= rows <= MAX_Y-1 + * @param uint8_t y end position / 0 <= rows <= MAX_Y-1 + * + * @return uint8_t + */ +uint8_t SSD1306_DrawLine (uint8_t x1, uint8_t x2, uint8_t y1, uint8_t y2) +{ + int16_t D; // determinant + int16_t delta_x, delta_y; // deltas + int16_t trace_x = 1, trace_y = 1; // steps + + delta_x = x2 - x1; // delta x + delta_y = y2 - y1; // delta y + + if (delta_x < 0) { // check if x2 > x1 + delta_x = -delta_x; // negate delta x + trace_x = -trace_x; // negate step x + } + + if (delta_y < 0) { // check if y2 > y1 + delta_y = -delta_y; // negate detla y + trace_y = -trace_y; // negate step y + } + + // Bresenham condition for m < 1 (dy < dx) + // ------------------------------------------------------------------------------------- + if (delta_y < delta_x) { + D = (delta_y << 1) - delta_x; // calculate determinant + SSD1306_DrawPixel (x1, y1); // draw first pixel + while (x1 != x2) { // check if x1 equal x2 + x1 += trace_x; // update x1 + if (D >= 0) { // check if determinant is positive + y1 += trace_y; // update y1 + D -= 2*delta_x; // update determinant + } + D += 2*delta_y; // update deteminant + SSD1306_DrawPixel (x1, y1); // draw next pixel + } + // for m > 1 (dy > dx) + // ------------------------------------------------------------------------------------- + } else { + D = delta_y - (delta_x << 1); // calculate determinant + SSD1306_DrawPixel (x1, y1); // draw first pixel + while (y1 != y2) { // check if y2 equal y1 + y1 += trace_y; // update y1 + if (D <= 0) { // check if determinant is positive + x1 += trace_x; // update y1 + D += 2*delta_y; // update determinant + } + D -= 2*delta_x; // update deteminant + SSD1306_DrawPixel (x1, y1); // draw next pixel + } + } + + return SSD1306_SUCCESS; +} + + +#if 0 + +const uint8_t BasicFont[][8] = { + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, + {0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00}, + {0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00}, + {0x00,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x00}, + {0x00,0x24,0x2A,0x7F,0x2A,0x12,0x00,0x00}, + {0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00}, + {0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00}, + {0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00}, + {0x00,0x1C,0x22,0x41,0x00,0x00,0x00,0x00}, + {0x00,0x41,0x22,0x1C,0x00,0x00,0x00,0x00}, + {0x00,0x08,0x2A,0x1C,0x2A,0x08,0x00,0x00}, + {0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00}, + {0x00,0xA0,0x60,0x00,0x00,0x00,0x00,0x00}, + {0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00}, + {0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00}, + {0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00}, + {0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00}, + {0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00}, + {0x00,0x62,0x51,0x49,0x49,0x46,0x00,0x00}, + {0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x00}, + {0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00}, + {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00}, + {0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00}, + {0x00,0x01,0x71,0x09,0x05,0x03,0x00,0x00}, + {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00}, + {0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00}, + {0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00}, + {0x00,0x00,0xAC,0x6C,0x00,0x00,0x00,0x00}, + {0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00}, + {0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00}, + {0x00,0x41,0x22,0x14,0x08,0x00,0x00,0x00}, + {0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00}, + {0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00}, + {0x00,0x7E,0x09,0x09,0x09,0x7E,0x00,0x00}, + {0x00,0x7F,0x49,0x49,0x49,0x36,0x00,0x00}, + {0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00}, + {0x00,0x7F,0x41,0x41,0x22,0x1C,0x00,0x00}, + {0x00,0x7F,0x49,0x49,0x49,0x41,0x00,0x00}, + {0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00}, + {0x00,0x3E,0x41,0x41,0x51,0x72,0x00,0x00}, + {0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00}, + {0x00,0x41,0x7F,0x41,0x00,0x00,0x00,0x00}, + {0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00}, + + {0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00}, + + {0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00}, + {0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00}, + {0x00,0x7F,0x04,0x08,0x10,0x7F,0x00,0x00}, + {0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00}, + {0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00}, + {0x00,0x3E,0x41,0x51,0x21,0x5E,0x00,0x00}, + {0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00}, + {0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00}, + {0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00}, + {0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00}, + {0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00}, + {0x00,0x3F,0x40,0x38,0x40,0x3F,0x00,0x00}, + {0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00}, + {0x00,0x03,0x04,0x78,0x04,0x03,0x00,0x00}, + {0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00}, + {0x00,0x7F,0x41,0x41,0x00,0x00,0x00,0x00}, + {0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00}, + {0x00,0x41,0x41,0x7F,0x00,0x00,0x00,0x00}, + {0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x00}, + {0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00}, + {0x00,0x01,0x02,0x04,0x00,0x00,0x00,0x00}, + {0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00}, + {0x00,0x7F,0x48,0x44,0x44,0x38,0x00,0x00}, + {0x00,0x38,0x44,0x44,0x28,0x00,0x00,0x00}, + {0x00,0x38,0x44,0x44,0x48,0x7F,0x00,0x00}, + {0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00}, + {0x00,0x08,0x7E,0x09,0x02,0x00,0x00,0x00}, + {0x00,0x18,0xA4,0xA4,0xA4,0x7C,0x00,0x00}, + {0x00,0x7F,0x08,0x04,0x04,0x78,0x00,0x00}, + {0x00,0x00,0x7D,0x00,0x00,0x00,0x00,0x00}, + {0x00,0x80,0x84,0x7D,0x00,0x00,0x00,0x00}, + {0x00,0x7F,0x10,0x28,0x44,0x00,0x00,0x00}, + {0x00,0x41,0x7F,0x40,0x00,0x00,0x00,0x00}, + {0x00,0x7C,0x04,0x18,0x04,0x78,0x00,0x00}, + {0x00,0x7C,0x08,0x04,0x7C,0x00,0x00,0x00}, + {0x00,0x38,0x44,0x44,0x38,0x00,0x00,0x00}, + {0x00,0xFC,0x24,0x24,0x18,0x00,0x00,0x00}, + {0x00,0x18,0x24,0x24,0xFC,0x00,0x00,0x00}, + {0x00,0x00,0x7C,0x08,0x04,0x00,0x00,0x00}, + {0x00,0x48,0x54,0x54,0x24,0x00,0x00,0x00}, + {0x00,0x04,0x7F,0x44,0x00,0x00,0x00,0x00}, + {0x00,0x3C,0x40,0x40,0x7C,0x00,0x00,0x00}, + {0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00}, + {0x00,0x3C,0x40,0x30,0x40,0x3C,0x00,0x00}, + {0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00}, + {0x00,0x1C,0xA0,0xA0,0x7C,0x00,0x00,0x00}, + {0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00}, + {0x00,0x08,0x36,0x41,0x00,0x00,0x00,0x00}, + {0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00}, + {0x00,0x41,0x36,0x08,0x00,0x00,0x00,0x00}, + {0x00,0x02,0x01,0x01,0x02,0x01,0x00,0x00}, + {0x00,0x02,0x05,0x05,0x02,0x00,0x00,0x00} +}; + + + + +#define SSD1306_128_64 + +#define i2c_addr 0x3C //oled i2c address +//OLED configuration +#if defined SSD1306_128_64 +#define SSD1306_LCDWIDTH 128 +#define SSD1306_LCDHEIGHT 64 +#endif +#if defined SSD1306_128_32 +#define SSD1306_LCDWIDTH 128 +#define SSD1306_LCDHEIGHT 32 +#endif +#if defined SSD1306_96_16 +#define SSD1306_LCDWIDTH 96 +#define SSD1306_LCDHEIGHT 16 +#endif + +//OLED SSD1306 commands as given in datasheet of ssd 1306 +#define SSD1306_SETCONTRAST 0x81 +#define SSD1306_DISPLAYALLON_RESUME 0xA4 +#define SSD1306_DISPLAYALLON 0xA5 +#define SSD1306_NORMALDISPLAY 0xA6 +#define SSD1306_INVERTDISPLAY 0xA7 +#define SSD1306_DISPLAYOFF 0xAE +#define SSD1306_DISPLAYON 0xAF + +#define SSD1306_SETDISPLAYOFFSET 0xD3 +#define SSD1306_SETCOMPINS 0xDA + +#define SSD1306_SETVCOMDETECT 0xDB + +#define SSD1306_SETDISPLAYCLOCKDIV 0xD5 +#define SSD1306_SETPRECHARGE 0xD9 + +#define SSD1306_SETMULTIPLEX 0xA8 + +#define SSD1306_SETLOWCOLUMN 0x00 +#define SSD1306_SETHIGHCOLUMN 0x10 + +#define SSD1306_SETSTARTLINE 0x40 + +#define SSD1306_MEMORYMODE 0x20 +#define SSD1306_COLUMNADDR 0x21 +#define SSD1306_PAGEADDR 0x22 + +#define SSD1306_COMSCANINC 0xC0 +#define SSD1306_COMSCANDEC 0xC8 + +#define SSD1306_SEGREMAP 0xA0 + +#define SSD1306_CHARGEPUMP 0x8D + +#define SSD1306_EXTERNALVCC 0x1 +#define SSD1306_SWITCHCAPVCC 0x2 + +// Scrolling #defines +#define SSD1306_ACTIVATE_SCROLL 0x2F +#define SSD1306_DEACTIVATE_SCROLL 0x2E +#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3 +#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26 +#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27 +#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29 +#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A + + +/*************************************************************************** +funcion: void begin_oled_i2c_ssd1306_12864() +Description: This function initializes 124x64 OLED display. +***************************************************************************/ +void begin_oled_i2c_ssd1306_12864() +{ + i2c_init(); + //initialize oled 128*64 + oled_command(SSD1306_DISPLAYOFF); + oled_command(SSD1306_SETDISPLAYCLOCKDIV); + oled_command(0x80); + oled_command(SSD1306_SETMULTIPLEX); + oled_command(64-1);//height-1 + oled_command(SSD1306_SETDISPLAYOFFSET); + oled_command(0x00);//no offset + oled_command(SSD1306_SETSTARTLINE| 0x00);//set start line + oled_command(SSD1306_CHARGEPUMP);//charge pump + oled_command(0x14);//dclk upto 14-15 + oled_command(SSD1306_MEMORYMODE); + oled_command(0x00);//OLED RAM + oled_command(SSD1306_SEGREMAP| 0x01); + oled_command(SSD1306_COMSCANDEC); + oled_command(SSD1306_SETCOMPINS); + oled_command(0x12); + oled_command(SSD1306_SETCONTRAST); + oled_command(0xcf); + oled_command(SSD1306_SETPRECHARGE); + oled_command(0xf1); + oled_command(SSD1306_SETVCOMDETECT); + oled_command(0x40); + oled_command(SSD1306_DISPLAYALLON_RESUME); + oled_command(SSD1306_NORMALDISPLAY); + oled_command(SSD1306_DISPLAYON); + oled_command(SSD1306_COLUMNADDR); + oled_command(0x00); + oled_command(0x7f); + oled_command(SSD1306_PAGEADDR); + oled_command(0x00); + oled_command(0x07); +} + +/**************************************************************************** +function: void oled_command(uint8_t data) +Description: Sends 'data' as command to OLED. +****************************************************************************/ +void oled_command(unsigned char data) +{ + + i2c_start(i2c_addr<<1 | I2C_WRITE); + i2c_write(0x00); + i2c_write(data); + i2c_stop(); +} + +/**************************************************************************** +function: void oled_data(uint8_t data) +Description: Sends 'data' to OLED RAM for displaying data +****************************************************************************/ +void oled_data(unsigned char data) +{ + i2c_start(i2c_addr<<1 | I2C_WRITE); + i2c_write(0x40); + i2c_write(data); + i2c_stop(); +} + + + + +#endif + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#if 0 + + +#include "oled.h" +#include "i2c.h" +#include "timer.h" + + + + + + + +#if 0 + + +void Oled_SendCommand(unsigned char command) +{ + I2C_Start(); + I2C_Write(OLED_ADDRESS_W); + I2C_Write(OzOLED_COMMAND_MODE); + I2C_Write(command); + I2C_Stop(); +} + +void Oled_SendData(unsigned char data) +{ + I2C_Start(); + I2C_Write(OLED_ADDRESS_W); + I2C_Write(OzOLED_DATA_MODE); + I2C_Write(data); + I2C_Stop(); +} + + + + +unsigned char Oled_PrintFloatXY(float float_num, unsigned char prec, unsigned char X, unsigned char Y) +{ + + unsigned char num_int = 0; + unsigned char num_frac = 0; + unsigned char num_extra = 0; + + long d = float_num; // get the integer part + float f = float_num - d; // get the fractional part + + if ( X < 128 ) + Oled_SetCursorXY(X, Y); + +// prec - 6 maximum + + + + + if (d == 0 && f < 0.0){ + + Oled_PrintChar('-'); + num_extra++; + Oled_PrintChar('0'); + num_extra++; + f *= -1; + + } + else if (d < 0 && f < 0.0){ + + num_int = Oled_PrintNumber(d); // count how many digits in integer part + f *= -1; + + } + else{ + + num_int = Oled_PrintNumber(d); // count how many digits in integer part + + } + + // only when fractional part > 0, we show decimal point + if (f > 0.0){ + + printChar('.'); + num_extra++; + + long f_shift = 1; + + if (num_int + prec > 8) + prec = 8 - num_int; + + for (unsigned char j=0; j 58) + sendData(0); + else + sendData(pgm_read_byte(&bigNumbers[number[count]-48][i])); + + + if(column >= 23){ + column = 0; + setCursorXY(X, ++Y); + } + else + column++; + + } + + count++; + + X = X + 3; + Y = Y - 4; + + + } + + + +} + + +void Oled_PrawBitmap(const byte *bitmaparray, byte X, byte Y, byte width, byte height){ + +// max width = 16 +// max height = 8 + + setCursorXY( X, Y ); + + byte column = 0; + for(int i=0; i 127) + C='*'; //star - indicate characters that can't be displayed + + + for(i=0; i<8; i++) { + + //read bytes from code memory + oled_data(BasicFont[C-32][i]); //font array starts at 0, ASCII starts at 32. Hence the translation + + } +} +void Oled_PrintChar(char C) +{ + unsigned char i; + + //Ignore unused ASCII characters. Modified the range to support multilingual characters. + if(C < 32 || C > 127) + C='*'; //star - indicate characters that can't be displayed + + + for(i=0; i<8; i++) { + + //read bytes from code memory + oled_data(BasicFont[C-32][i]); //font array starts at 0, ASCII starts at 32. Hence the translation + + } +} + + + + + +void Oled_PrintString(const char *String, unsigned char X, unsigned char Y, unsigned char numChar) +{ + unsigned char count=0; + + if ( X < 128 ) + { + Oled_SetCursorXY(X, Y); + } + + + + while(String[count] && count>4)&0x0F)); //set column higher address + oled_command(0xB0 + Y); //set page address + +} + + +unsigned char Oled_PrintNumberXY(long long_num, unsigned char X, unsigned char Y) +{ + + unsigned char char_buffer[10] = ""; + unsigned char i = 0; + unsigned char f = 0; // number of characters + + + + if ( X < 128 ) + Oled_SetCursorXY(X, Y); + + + + if (long_num < 0) { + + f++; + Oled_PrintChar('-'); + long_num = -long_num; + + } + else if (long_num == 0) { + + f++; + Oled_PrintChar('0'); + return f; + + } + + while (long_num > 0) { + + char_buffer[i++] = long_num % 10; + long_num /= 10; + + } + + f += i; + for(; i > 0; i--) { + + Oled_PrintChar('0'+ char_buffer[i - 1]); + + } + + return f; + +} + +unsigned char Oled_PrintNumber(long long_num) +{ + unsigned char char_buffer[10] = ""; + unsigned char i = 0; + unsigned char f = 0; // number of characters + + + + + if (long_num < 0) { + + f++; + Oled_PrintChar('-'); + long_num = -long_num; + + } + else if (long_num == 0) { + + f++; + Oled_PrintChar('0'); + return f; + + } + + while (long_num > 0) { + + char_buffer[i++] = long_num % 10; + long_num /= 10; + + } + + f += i; + for(; i > 0; i--) { + + Oled_PrintChar('0'+ char_buffer[i - 1]); + + } + + return f; +} + + +void Oled_ClearDisplay(void) +{ + unsigned char page; + unsigned char column; + + for(page=0; page<8; page++) + { + + Oled_SetCursorXY(0, page); + for(column=0; column<128; column++) + { + oled_data(0); + } + + } + + Oled_SetCursorXY(0,0); + +} +#endif diff --git a/Project/Application/oled_ssd1306/ssd1306.h b/Project/Application/oled_ssd1306/ssd1306.h new file mode 100644 index 0000000..b5bb167 --- /dev/null +++ b/Project/Application/oled_ssd1306/ssd1306.h @@ -0,0 +1,373 @@ +/** \file ssd1306.h */ +#if !defined(SSD1306_H__C33398CC_133C_46F3_B9C5_5D678D1943A7__INCLUDED_) +#define SSD1306_H__C33398CC_133C_46F3_B9C5_5D678D1943A7__INCLUDED_ + +#include "board_config.h" + + +// Success / Error +// ------------------------------------------------------------------------------------ +#define SSD1306_SUCCESS 0 +#define SSD1306_ERROR 1 + +// Address definition +// ------------------------------------------------------------------------------------ +#define SSD1306_ADDR 0x3C + +// Command definition +// ------------------------------------------------------------------------------------ +#define SSD1306_COMMAND 0x80 // Continuation bit=1, D/C=0; 1000 0000 +#define SSD1306_COMMAND_STREAM 0x00 // Continuation bit=0, D/C=0; 0000 0000 +#define SSD1306_DATA 0xC0 // Continuation bit=1, D/C=1; 1100 0000 +#define SSD1306_DATA_STREAM 0x40 // Continuation bit=0, D/C=1; 0100 0000 + +#define SSD1306_SET_MUX_RATIO 0xA8 // Set MUX ratio to N+1 MUX, N=A[5:0] : from 16MUX to 64MUX +#define SSD1306_DISPLAY_OFFSET 0xD3 // Set Display Offset +#define SSD1306_DISPLAY_ON 0xAF // Display ON in normal mode +#define SSD1306_DISPLAY_OFF 0xAE // Display OFF (sleep mode) +#define SSD1306_DIS_ENT_DISP_ON 0xA4 // Entire Display ON, Output ignores RAM content +#define SSD1306_DIS_IGNORE_RAM 0xA5 // Resume to RAM content display, Output follows RAM content +#define SSD1306_DIS_NORMAL 0xA6 // Normal display, 0 in RAM: OFF in display panel, 1 in RAM: ON in display panel +#define SSD1306_DIS_INVERSE 0xA7 // Inverse display, 0 in RAM: ON in display panel, 1 in RAM: OFF in display panel +#define SSD1306_DEACT_SCROLL 0x2E // Stop scrolling that is configured by command 26h/27h/29h/2Ah +#define SSD1306_ACTIVE_SCROLL 0x2F // Start scrolling that is configured by the scrolling setup commands:26h/27h/29h/2Ah +#define SSD1306_SET_START_LINE 0x40 // Set Display Start Line +#define SSD1306_MEMORY_ADDR_MODE 0x20 // Set Memory, Addressing Mode +#define SSD1306_SET_COLUMN_ADDR 0x21 // Set Column Address +#define SSD1306_SET_PAGE_ADDR 0x22 // Set Page Address +#define SSD1306_SEG_REMAP 0xA0 // Set Segment Re-map, X[0]=0b column address 0 is mapped to SEG0 +#define SSD1306_SEG_REMAP_OP 0xA1 // Set Segment Re-map, X[0]=1b: column address 127 is mapped to SEG0 +#define SSD1306_COM_SCAN_DIR 0xC0 // Set COM Output, X[3]=0b: normal mode (RESET) Scan from COM0 to COM[N –1], e N is the Multiplex ratio +#define SSD1306_COM_SCAN_DIR_OP 0xC8 // Set COM Output, X[3]=1b: remapped mode. Scan from COM[N-1] to COM0, e N is the Multiplex ratio +#define SSD1306_COM_PIN_CONF 0xDA // Set COM Pins Hardware Configuration, + // A[4]=0b, Sequential COM pin configuration, A[4]=1b(RESET), Alternative COM pin configuration + // A[5]=0b(RESET), Disable COM Left/Right remap, A[5]=1b, Enable COM Left/Right remap +#define SSD1306_SET_CONTRAST 0x81 // Set Contrast Control, Double byte command to select 1 to 256 contrast steps, increases as the value increases +#define SSD1306_SET_OSC_FREQ 0xD5 // Set Display Clock Divide Ratio/Oscillator Frequency + // A[3:0] : Define the divide ratio (D) of the display clocks (DCLK): Divide ratio= A[3:0] + 1, RESET is 0000b (divide ratio = 1) + // A[7:4] : Set the Oscillator Frequency, FOSC. Oscillator Frequency increases with the value of A[7:4] and vice versa. RESET is 1000b +#define SSD1306_SET_CHAR_REG 0x8D // Charge Pump Setting, A[2] = 0b, Disable charge pump(RESET), A[2] = 1b, Enable charge pump during display on + // The Charge Pump must be enabled by the following command: + // 8Dh ; Charge Pump Setting + // 14h ; Enable Charge Pump + // AFh; Display ON +#define SSD1306_SET_PRECHARGE 0xD9 // Set Pre-charge Period +#define SSD1306_VCOM_DESELECT 0xDB // Set VCOMH Deselect Leve +#define SSD1306_NOP 0xE3 // No operation +#define SSD1306_RESET 0xE4 // Maybe SW RESET, @source https://github.com/SmingHub/Sming/issues/501 + +// Clear Color +// ------------------------------------------------------------------------------------ +#define CLEAR_COLOR 0x00 + +// Init Status +// ------------------------------------------------------------------------------------ +#define INIT_STATUS 0xFF + +// AREA definition +// ------------------------------------------------------------------------------------ +#define START_PAGE_ADDR 0 +#define END_PAGE_ADDR 3 // 7 for 128x64, 3 for 128x32 version +#define START_COLUMN_ADDR 0 +#define END_COLUMN_ADDR 127 +#define RAM_X_END END_COLUMN_ADDR + 1 +#define RAM_Y_END END_PAGE_ADDR + 1 + +#define CACHE_SIZE_MEM (1 + END_PAGE_ADDR) * (1 + END_COLUMN_ADDR) + +#define MAX_X END_COLUMN_ADDR +#define MAX_Y (END_PAGE_ADDR + 1) * 8 + +// @var set area +extern unsigned int _counter; + +/** + * --------------------------------------------------------------------------------------------+ + * PRIVATE FUNCTIONS + * --------------------------------------------------------------------------------------------+ + */ + +/** + * @brief SSD1306 Init + * + * @param uint8_t + * + * @return uint8_t + */ +uint8_t SSD1306_Init (uint8_t); + +/** + * @brief SSD1306 Send Start and SLAW request + * + * @param uint8_t + * + * @return uint8_t + */ +uint8_t SSD1306_Send_StartAndSLAW (uint8_t); + +/** + * @brief SSD1306 Send command + * + * @param uint8_t + * + * @return uint8_t + */ +uint8_t SSD1306_Send_Command (uint8_t); + +/** + * +------------------------------------------------------------------------------------+ + * |== PUBLIC FUNCTIONS ================================================================| + * +------------------------------------------------------------------------------------+ + */ + +/** + * @brief SSD1306 Clear screen + * + * @param void + * + * @return void + */ +void SSD1306_ClearScreen (void); + +/** + * @brief SSD1306 Normal colors + * + * @param uint8_t + * + * @return uint8_t + */ +uint8_t SSD1306_NormalScreen (uint8_t); + +/** + * @brief SSD1306 Inverse colors + * + * @param uint8_t + * + * @return uint8_t + */ +uint8_t SSD1306_InverseScreen (uint8_t); + +/** + * @brief SSD1306 Update screen + * + * @param uint8_t + * + * @return uint8_t + */ +uint8_t SSD1306_UpdateScreen (uint8_t); + +/** + * @brief SSD1306 Update text position + * + * @param void + * + * @return uint8_t + */ +uint8_t SSD1306_UpdatePosition (void); + +/** + * @brief SSD1306 Set position + * + * @param uint8_t + * @param uint8_t + * + * @return void + */ +void SSD1306_SetPosition (uint8_t, uint8_t); + +/** + * @brief SSD1306 Draw character + * + * @param char + * + * @return uint8_t + */ +uint8_t SSD1306_DrawChar (char); + +/** + * @brief SSD1306 Draw string + * + * @param char * + * + * @return void + */ +void SSD1306_DrawString (char *); + +/** + * @brief Draw pixel + * + * @param uint8_t + * @param uint8_t + * + * @return uint8_t + */ +uint8_t SSD1306_DrawPixel (uint8_t, uint8_t); + +/** + * @brief Draw line + * + * @param uint8_t + * @param uint8_t + * @param uint8_t + * @param uint8_t + * + * @return uint8_t + */ +uint8_t SSD1306_DrawLine (uint8_t, uint8_t, uint8_t, uint8_t); + + + + + + + + + +#if 0 +#define OzOLED_Max_X 128 //128 Pixels +#define OzOLED_Max_Y 64 //64 Pixels + +#define OLED_ADDRESS_W 0x3C +#define OLED_ADDRESS_R 0x3D + +#define I2C_400KHZ 1 // 0 to use default 100Khz, 1 for 400Khz + +// registers +#define OzOLED_COMMAND_MODE 0x80 +#define OzOLED_DATA_MODE 0x40 + +// commands +#define OzOLED_CMD_DISPLAY_OFF 0xAE +#define OzOLED_CMD_DISPLAY_ON 0xAF +#define OzOLED_CMD_NORMAL_DISPLAY 0xA6 +#define OzOLED_CMD_INVERSE_DISPLAY 0xA7 +#define OzOLED_CMD_SET_BRIGHTNESS 0x81 + +#define OzOLED_RIGHT_SCROLL 0x26 +#define OzOLED_LEFT_SCROLL 0x27 +#define OzOLED_SET_VERTICAL_SCROLL_AREA 0xA3 +#define OzOLED_VERTICAL_RIGHT_SCROLL 0x29 +#define OzOLED_VERTICAL_LEFT_SCROLL 0x2A +#define OzOLED_CMD_ACTIVATE_SCROLL 0x2F +#define OzOLED_CMD_DEACTIVATE_SCROLL 0x2E + +#define HORIZONTAL_ADDRESSING 0x00 +#define PAGE_ADDRESSING 0x02 + +#define Scroll_Left 0x00 +#define Scroll_Right 0x01 +#define Scroll_Up 0x02 +#define Scroll_Down 0x03 + +#define Scroll_2Frames 0x07 +#define Scroll_3Frames 0x04 +#define Scroll_4Frames 0x05 +#define Scroll_5Frames 0x00 +#define Scroll_25Frames 0x06 +#define Scroll_64Frames 0x01 +#define Scroll_128Frames 0x02 +#define Scroll_256Frames 0x03 + + + + + + + + + + + + + + +// =================== High Level =========================== + + +#define OLED_I2C_ADDRESS 0x3C + +// The SSD1306 datasheet (pg.20) says that a control byte has to be sent before sending a command +#define OLED_CONTROL_BYTE_CMD_SINGLE 0x80 +#define OLED_CONTROL_BYTE_CMD_STREAM 0x00 +#define OLED_CONTROL_BYTE_DATA_STREAM 0x40 + +// Fundamental commands (pg.28) +#define OLED_CMD_SET_CONTRAST 0x81 // follow with 0x7F +#define OLED_CMD_DISPLAY_RAM 0xA4 +#define OLED_CMD_DISPLAY_ALLON 0xA5 +#define OLED_CMD_DISPLAY_NORMAL 0xA6 +#define OLED_CMD_DISPLAY_INVERTED 0xA7 +#define OLED_CMD_DISPLAY_OFF 0xAE +#define OLED_CMD_DISPLAY_ON 0xAF + +// Addressing Command Table (pg.30) +#define OLED_CMD_SET_MEMORY_ADDR_MODE 0x20 // follow with 0x00 = HORZ mode = Behave like a KS108 graphic LCD +#define OLED_CMD_SET_COLUMN_RANGE 0x21 // can be used only in HORZ/VERT mode - follow with 0x00 + 0x7F = COL127 +#define OLED_CMD_SET_PAGE_RANGE 0x22 // can be used only in HORZ/VERT mode - follow with 0x00 + 0x07 = PAGE7 + +// Hardware Config (pg.31) +#define OLED_CMD_SET_DISPLAY_START_LINE 0x40 +#define OLED_CMD_SET_SEGMENT_REMAP 0xA1 +#define OLED_CMD_SET_MUX_RATIO 0xA8 // follow with 0x3F = 64 MUX +#define OLED_CMD_SET_COM_SCAN_MODE 0xC8 +#define OLED_CMD_SET_DISPLAY_OFFSET 0xD3 // follow with 0x00 +#define OLED_CMD_SET_COM_PIN_MAP 0xDA // follow with 0x12 + +// Timing and Driving Scheme (pg.32) +#define OLED_CMD_SET_DISPLAY_CLK_DIV 0xD5 // follow with 0x80 +#define OLED_CMD_SET_PRECHARGE 0xD9 // follow with 0x22 +#define OLED_CMD_SET_VCOMH_DESELCT 0xDB // follow with 0x30 + +// Charge Pump (pg.62) +#define OLED_CMD_SET_CHARGE_PUMP 0x8D // follow with 0x14 + +// NOP +#define OLED_CMD_NOP 0xE3 + + +void Oled_SendCommand(unsigned char command); +void Oled_SendData(unsigned char data); +void Oled_PrintCharXY(char C, unsigned char X, unsigned char Y); +void Oled_PrintChar(char C); +void Oled_PrintString(const char *String, unsigned char X, unsigned char Y, unsigned char numChar); +void Oled_SetCursorXY(unsigned char X, unsigned char Y); +unsigned char Oled_PrintNumberXY(long long_num, unsigned char X, unsigned char Y); +unsigned char Oled_PrintNumber(long long_num); +unsigned char Oled_PrintFloatXY(float float_num, unsigned char prec, unsigned char X, unsigned char Y); +void Oled_SetPowerOff(void); +void Oled_SetPowerOn(void); +void Oled_SetNormalDisplay(void); +void Oled_SetPageMode(void); +void Oled_ClearDisplay(void); +void Oled_Initialization(void); + + + + + + + + + + + + + + +void begin_oled_i2c_ssd1306_12864(); +void oled_command(unsigned char data); +void oled_data(unsigned char data); +void oled_black_white(); +void dispaly_bmp_image(unsigned char __flash *img_buf); + + + + + +#endif + + + + + +#endif diff --git a/Project/Application/oled_ssd1306/ssd1306_i2c.c b/Project/Application/oled_ssd1306/ssd1306_i2c.c new file mode 100644 index 0000000..4f7b302 --- /dev/null +++ b/Project/Application/oled_ssd1306/ssd1306_i2c.c @@ -0,0 +1,40 @@ +#include "ssd1306_i2c.h" +#include "app_gpio_i2c.h" + +int8_t TWI_MT_Start (void) +{ + App_Gpio_I2C_Start(); + return SUCCESS; +} + +int8_t TWI_MT_Send_SLAW (uint8_t address) +{ + bool bRet; + bRet = App_Gpio_I2C_WriteData(address << 1); + if(bRet == false) + return FAIL; + return SUCCESS; +} + +int8_t TWI_MT_Send_Data (uint8_t data) +{ + bool bRet; + bRet = App_Gpio_I2C_WriteData(data); + if(bRet == false) + return FAIL; + return SUCCESS; +} + +int8_t TWI_MR_Send_SLAR (uint8_t address) +{ + bool bRet; + bRet = App_Gpio_I2C_WriteData(((address << 1) | 0x01)); + if(bRet == false) + return FAIL; + return SUCCESS; +} + +void TWI_Stop (void) +{ + App_Gpio_I2C_Stop(); +} diff --git a/Project/Application/oled_ssd1306/ssd1306_i2c.h b/Project/Application/oled_ssd1306/ssd1306_i2c.h new file mode 100644 index 0000000..b6886bb --- /dev/null +++ b/Project/Application/oled_ssd1306/ssd1306_i2c.h @@ -0,0 +1,14 @@ +/** \file ssd1306_i2c.h */ +#if !defined(SSD1306_I2C_H__AF936065_D874_4AA4_A7D4_296DA996C6F3__INCLUDED_) +#define SSD1306_I2C_H__AF936065_D874_4AA4_A7D4_296DA996C6F3__INCLUDED_ + +#include "board_config.h" + + +int8_t TWI_MT_Start (void); +int8_t TWI_MT_Send_SLAW (uint8_t address); +int8_t TWI_MT_Send_Data (uint8_t data); +int8_t TWI_MR_Send_SLAR (uint8_t address); +void TWI_Stop (void); + +#endif diff --git a/Project/Application/sw_timer.c b/Project/Application/sw_timer.c new file mode 100644 index 0000000..5d04e6c --- /dev/null +++ b/Project/Application/sw_timer.c @@ -0,0 +1,85 @@ +#include "sw_timer.h" + + + + +typedef struct _timer_callback_info +{ + SW_TIMER_CALLBACK_TYPE SW_Callback_Type; + uint32_t SW_Timer_StartTick; + uint32_t SW_Timer_PeriodCount; + SW_TIMER_CALLBACK_FN SW_Timer_CallbackFunction; +}SW_TIMER_INFO; + + +static SW_TIMER_INFO SW_Timer_Info[MAX_SW_TIMER_REGISTER_COUNT]; + + + +bool SW_Timer_Callback_Register(SW_TIMER_CALLBACK_TYPE type, uint32_t PeriodTime, SW_TIMER_CALLBACK_FN pTimerCallback) +{ + uint8_t i; + bool ret = false; + + for(i = 0 ; i < MAX_SW_TIMER_REGISTER_COUNT ; i++) + { + if(SW_Timer_Info[i].SW_Timer_CallbackFunction == NULL) + { + SW_Timer_Info[i].SW_Callback_Type = type; + SW_Timer_Info[i].SW_Timer_StartTick = millis(); + SW_Timer_Info[i].SW_Timer_PeriodCount = PeriodTime; + SW_Timer_Info[i].SW_Timer_CallbackFunction = pTimerCallback; + ret = true; + break; + } + } + + return ret; +} + +bool SW_Timer_Callback_UnRegister(SW_TIMER_CALLBACK_FN pSwTimerCallbackFunc) +{ + uint8_t i; + bool ret = false; + + for(i = 0 ; i < MAX_SW_TIMER_REGISTER_COUNT ; i++) + { + if(SW_Timer_Info[i].SW_Timer_CallbackFunction == pSwTimerCallbackFunc) + { + SW_Timer_Info[i].SW_Callback_Type = SW_TIMER_RUN_NONE; + SW_Timer_Info[i].SW_Timer_CallbackFunction = NULL; + ret = true; + } + } + return ret; +} + +void SW_Timer_Callback_Process(void) +{ + uint8_t i; + uint32_t nowTickCount = millis(); + + for(i = 0 ; i < MAX_SW_TIMER_REGISTER_COUNT ; i++) + { + if(SW_Timer_Info[i].SW_Timer_CallbackFunction != NULL && + SW_Timer_Info[i].SW_Callback_Type != SW_TIMER_RUN_NONE) + { + if((nowTickCount - SW_Timer_Info[i].SW_Timer_StartTick) >= SW_Timer_Info[i].SW_Timer_PeriodCount) + { + if(SW_Timer_Info[i].SW_Callback_Type == SW_TIMER_RUN_ONNY_ONCE) + { + SW_Timer_Info[i].SW_Timer_StartTick = 0xFFFFFFFF; + SW_Timer_Info[i].SW_Callback_Type = SW_TIMER_RUN_NONE; + SW_Timer_Info[i].SW_Timer_CallbackFunction(); + SW_Timer_Info[i].SW_Timer_CallbackFunction = NULL; + } + else + { + SW_Timer_Info[i].SW_Timer_CallbackFunction(); + SW_Timer_Info[i].SW_Timer_StartTick = nowTickCount; + } + } + } + } +} + diff --git a/Project/Application/sw_timer.h b/Project/Application/sw_timer.h new file mode 100644 index 0000000..64221fd --- /dev/null +++ b/Project/Application/sw_timer.h @@ -0,0 +1,25 @@ +/** \file sw_timer.h */ +#if !defined(SW_TIMER_H__8AF06FDD_AC0A_4693_88C3_8ACCF1AB4372__INCLUDED_) +#define SW_TIMER_H__8AF06FDD_AC0A_4693_88C3_8ACCF1AB4372__INCLUDED_ + +#include "define.h" +#include "board_config.h" + + +#define MAX_SW_TIMER_REGISTER_COUNT 10 + +typedef enum +{ + SW_TIMER_RUN_NONE, + SW_TIMER_RUN_ONNY_ONCE, + SW_TIMER_RUN_CONTINUE, +}SW_TIMER_CALLBACK_TYPE; + +typedef void (*SW_TIMER_CALLBACK_FN) (void); + + +bool SW_Timer_Callback_Register(SW_TIMER_CALLBACK_TYPE type, uint32_t PeriodTime, SW_TIMER_CALLBACK_FN pTimerCallback); +bool SW_Timer_Callback_UnRegister(SW_TIMER_CALLBACK_FN pSwTimerCallbackFunc); +void SW_Timer_Callback_Process(void); + +#endif diff --git a/Project/Application/system_func.c b/Project/Application/system_func.c index 5fe9774..95b5262 100644 --- a/Project/Application/system_func.c +++ b/Project/Application/system_func.c @@ -4,6 +4,11 @@ static volatile uint8_t usTickCountDiv; +static volatile uint32_t msTickCount; + +static void SystemTimerInitialization(void); +static void SystemTimer_Interrput_Handler(void); +static uint32_t SystemTimer_GetPeriodCount(uint32_t prescalar, uint32_t frequency); void SystemCoreClockSet(SYSTEM_CORE_CLOCK_LIST clock) { @@ -26,5 +31,75 @@ void SystemCoreClockSet(SYSTEM_CORE_CLOCK_LIST clock) LP_SetOperatingVoltage(LP_OVR_1_1); break;; } + SystemTimerInitialization(); +} + +uint32_t SystemTimer_Get_TickCount(void) +{ + return msTickCount; +} + + + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////// +static void SystemTimerInitialization(void) +{ + // Declare variables + tmr_cfg_t tmr; + int tmr_id = MXC_TMR_GET_IDX(SYSTEM_TIMER_INSTANCE); + uint32_t periodTicks = SystemTimer_GetPeriodCount(1, 1000); + + /* + Steps for configuring a timer for PWM mode: + 1. Disable the timer + 2. Set the prescale value + 3 Configure the timer for continuous mode + 4. Set polarity, timer parameters + 5. Enable Timer + */ + + TMR_Disable(SYSTEM_TIMER_INSTANCE); + TMR_Init(SYSTEM_TIMER_INSTANCE, TMR_PRES_1, 0); + + tmr.mode = TMR_MODE_CONTINUOUS; + tmr.cmp_cnt = (periodTicks - 1); + tmr.pol = 0; + + TMR_Config(SYSTEM_TIMER_INSTANCE, &tmr); + + if(tmr_id == 0){ + NVIC_SetVector(TMR0_IRQn, SystemTimer_Interrput_Handler); + NVIC_EnableIRQ(TMR0_IRQn); + } + + else if(tmr_id == 1) + { + NVIC_SetVector(TMR1_IRQn, SystemTimer_Interrput_Handler); + NVIC_EnableIRQ(TMR1_IRQn); + } + else if(tmr_id == 2) + { + NVIC_SetVector(TMR2_IRQn, SystemTimer_Interrput_Handler); + NVIC_EnableIRQ(TMR2_IRQn); + } + + msTickCount = 0; + TMR_Enable(SYSTEM_TIMER_INSTANCE); } +static void SystemTimer_Interrput_Handler(void) +{ + TMR_IntClear(SYSTEM_TIMER_INSTANCE); + msTickCount++; + +} + + +static uint32_t SystemTimer_GetPeriodCount(uint32_t prescalar, uint32_t frequency) +{ + uint32_t retVal, clkFreq; + clkFreq = PeripheralClock; + retVal = clkFreq / (prescalar * frequency); + return retVal; +} diff --git a/Project/Application/system_func.h b/Project/Application/system_func.h index 4c58ad9..203b2a8 100644 --- a/Project/Application/system_func.h +++ b/Project/Application/system_func.h @@ -11,6 +11,12 @@ typedef enum HIRC_24MHZ, }SYSTEM_CORE_CLOCK_LIST; + +#define Delay_ms(delay) mxc_delay(MXC_DELAY_MSEC(delay)) +#define Delay_us(delay) mxc_delay(MXC_DELAY_USEC(delay)) + + void SystemCoreClockSet(SYSTEM_CORE_CLOCK_LIST clock); +uint32_t SystemTimer_Get_TickCount(void); #endif diff --git a/Project/Compiler/AKM_Temperature_Demo.uvguix.befs b/Project/Compiler/AKM_Temperature_Demo.uvguix.befs index 7ba891b..6f28fa8 100644 --- a/Project/Compiler/AKM_Temperature_Demo.uvguix.befs +++ b/Project/Compiler/AKM_Temperature_Demo.uvguix.befs @@ -6,7 +6,7 @@
### uVision Project, (C) Keil Software
- C:\Work\97. GitServer\AKM_Demo_Board\Project\Application + C:\Work\97. GitServer\AKM_Demo_Board\Project\Application\oled_ssd1306 @@ -20,12 +20,12 @@ 346 Code Coverage - 1010 160 + 1010 339 204 Performance Analyzer - 1170 + 1170 175 175 100 @@ -70,7 +70,7 @@ 466 Source Browser 500 - 300 + 166 @@ -78,11 +78,11 @@ - 1 - 1 + 0 + 0 0 - 0 - -1 + 50 + 16 @@ -101,17 +101,17 @@ -1 - 104 + 237 1920 3840 - 733 + 866 0 - 554 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000400000003000000010000003F433A5C576F726B5C39372E204769745365727665725C414B4D5F44656D6F5F426F6172645C50726F6A6563745C4170706C69636174696F6E5C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF47433A5C576F726B5C39372E204769745365727665725C414B4D5F44656D6F5F426F6172645C50726F6A6563745C4170706C69636174696F6E5C626F6172645F636F6E6669672E68000000000E626F6172645F636F6E6669672E6800000000FFDC7800FFFFFFFF41433A5C576F726B5C39372E204769745365727665725C414B4D5F44656D6F5F426F6172645C50726F6A6563745C4170706C69636174696F6E5C7374727563742E6800000000087374727563742E6800000000BECEA100FFFFFFFF46433A5C576F726B5C39372E204769745365727665725C414B4D5F44656D6F5F426F6172645C50726F6A6563745C4170706C69636174696F6E5C73797374656D5F66756E632E63000000000D73797374656D5F66756E632E6300000000F0A0A100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000B109000066000000000F00004C030000 + 897 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000007000000010000000100000043433A5C576F726B5C39372E204769745365727665725C414B4D5F44656D6F5F426F6172645C50726F6A6563745C4170706C69636174696F6E5C6170705F756172742E63000000000A6170705F756172742E6300000000C5D4F200FFFFFFFF3F433A5C576F726B5C39372E204769745365727665725C414B4D5F44656D6F5F426F6172645C50726F6A6563745C4170706C69636174696F6E5C6D61696E2E6300000000066D61696E2E6300000000FFDC7800FFFFFFFF4F433A5C576F726B5C39372E204769745365727665725C414B4D5F44656D6F5F426F6172645C50726F6A6563745C4170706C69636174696F6E5C6F6C65645F737364313330365C737364313330362E630000000009737364313330362E6300000000BECEA100FFFFFFFF53433A5C576F726B5C39372E204769745365727665725C414B4D5F44656D6F5F426F6172645C50726F6A6563745C4170706C69636174696F6E5C6F6C65645F737364313330365C737364313330365F6932632E63000000000D737364313330365F6932632E6300000000F0A0A100FFFFFFFF4B433A5C576F726B5C39372E204769745365727665725C414B4D5F44656D6F5F426F6172645C50726F6A6563745C53444B5C537461727475705C737461727475705F6D617833323636302E730000000012737461727475705F6D617833323636302E7300000000BCA8E100FFFFFFFF4F433A5C576F726B5C39372E204769745365727665725C414B4D5F44656D6F5F426F6172645C50726F6A6563745C4170706C69636174696F6E5C6F6C65645F737364313330365C737364313330362E680000000009737364313330362E68000000009CC1B600FFFFFFFF4F433A5C576F726B5C39372E204769745365727665725C414B4D5F44656D6F5F426F6172645C50726F6A6563745C4170706C69636174696F6E5C6F6C65645F737364313330365C666F6E743878382E680000000009666F6E743878382E6800000000F7B88600FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000B109000066000000000F000095020000 @@ -134,7 +134,7 @@ 16 - F40F00006600000090140000F6000000 + 7408000066000000100D0000F6000000 @@ -150,7 +150,7 @@ 0 16 - 03000000660000002A0200001C030000 + 03000000660000002A02000065020000 16 @@ -170,7 +170,7 @@ 0 16 - 03000000660000002A0200001C030000 + 03000000660000002A02000065020000 16 @@ -450,7 +450,7 @@ 0 16 - 03000000660000002A0200001C030000 + 03000000660000002A02000065020000 16 @@ -470,7 +470,7 @@ 0 16 - 03000000660000002A0200001C030000 + 03000000660000002A02000065020000 16 @@ -490,7 +490,7 @@ 0 16 - 03000000500300007D070000CD030000 + 03000000990200007D070000CD030000 16 @@ -530,7 +530,7 @@ 0 16 - 03000000500300007D070000CD030000 + 03000000990200007D070000CD030000 16 @@ -1150,7 +1150,7 @@ 0 16 - 03000000660000002A0200001C030000 + 03000000660000002A02000065020000 16 @@ -1170,7 +1170,7 @@ 0 16 - 03000000500300007D070000CD030000 + 03000000990200007D070000CD030000 16 @@ -1190,7 +1190,7 @@ 0 16 - 03000000500300007D070000CD030000 + 03000000990200007D070000CD030000 16 @@ -1250,7 +1250,7 @@ 0 16 - 03000000500300007D070000CD030000 + 03000000990200007D070000CD030000 16 @@ -1270,7 +1270,7 @@ 0 16 - 03000000500300007D070000CD030000 + 03000000990200007D070000CD030000 16 @@ -1799,14 +1799,14 @@ 3312 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F40F00006600000090140000F6000000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A0130000660000009014000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF2D0200004F00000031020000350300000100000002000010040000000100000012FFFFFF87060000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000F0000660000002D1100004C030000000000004F0000002D020000350300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000900500001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000F00003002000090140000D4020000000000001902000090050000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000035030000800700003903000001000000010000100400000001000000E3FDFFFF6F010000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000F00005003000080160000FD030000000000003903000080070000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000007408000066000000100D0000F6000000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000200C000066000000100D000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF2D0200004F000000310200007E0200000100000002000010040000000100000012FFFFFF87060000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000008007000066000000AD09000095020000000000004F0000002D0200007E0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000900500001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000008007000030020000100D0000D4020000000000001902000090050000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000007E0200008007000082020000010000000100001004000000010000001FFDFFFFAB000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000008007000099020000000F0000FD030000000000008202000080070000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File - 2885 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000010464C4153485F414444525F53544152549600000000000000140010464C4153485F414444525F5354415254043430303007646174616C656E046A756D700B656570726F6D5F64617461155361766546696C654E616D655F4461746142756666104649524D574152455F56455253494F4E135665726966795F53656E645F53756363657373076F7364656C617918675F4E697467656E5665726966794F7574707574496E666F0D675F73656E736F725F6E616D6510707276557074696D65436F6D6D616E6406757074696D650468656C7008726561646461746105736176656617497346696E676572417265614C61726765456E6F7567680866705F6D65726765032F203011486172644661756C745F48616E646C65720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 2552 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000005464F4E54539600000000000000010005464F4E545300000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -1822,7 +1822,7 @@ Build 980 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000A44656D6F20426F617264960000000000000001000A44656D6F20426F617264000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000A44656D6F20426F617264960000000000000001000A44656D6F20426F617264000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -1855,6 +1855,1747 @@ 1080 + + 1 + Debug + + -1 + -1 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 310200004F00000080070000DF000000 + + + 16 + B109000066000000000F0000F6000000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000002A020000EA020000 + + + 16 + 220F0000390000001210000004010000 + + + + 109 + 109 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000002A020000EA020000 + + + 16 + 220F0000390000003E10000079020000 + + + + 1465 + 1465 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300001E0300007D070000CD030000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300001E0300007D070000CD030000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300001E0300007D070000CD030000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300001E0300007D070000CD030000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 34020000660000007D070000C6000000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 1935 + 1935 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + C70300001E0300007D070000CD030000 + + + 16 + 220F0000390000001210000004010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300001E0300007D070000CD030000 + + + 16 + 220F0000390000001210000004010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300001E0300007D070000CD030000 + + + 16 + 220F0000390000001210000004010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300001E0300007D070000CD030000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300001E0300007D070000CD030000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300001E0300007D070000CD030000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300001E0300007D070000CD030000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 195 + 195 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000002A020000EA020000 + + + 16 + 220F0000390000003E10000079020000 + + + + 196 + 196 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000002A020000EA020000 + + + 16 + 220F0000390000003E10000079020000 + + + + 197 + 197 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000990200007D070000CD030000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 198 + 198 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0000000007030000C0030000E6030000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000990200007D070000CD030000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 203 + 203 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + 310200006300000080070000DF000000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 34020000660000007D070000C6000000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300001E0300007D070000CD030000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 34020000660000007D070000C6000000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 34020000660000007D070000C6000000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 34020000660000007D070000C6000000 + + + 16 + 220F0000390000001210000004010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 34020000660000007D070000C6000000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 38003 + 38003 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000002A020000EA020000 + + + 16 + 220F0000390000003E10000079020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000990200007D070000CD030000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000990200007D070000CD030000 + + + 16 + 220F0000390000003E10000079020000 + + + + 437 + 437 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300001E0300007D070000CD030000 + + + 16 + 220F0000390000001210000004010000 + + + + 440 + 440 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300001E0300007D070000CD030000 + + + 16 + 220F0000390000001210000004010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000990200007D070000CD030000 + + + 16 + 220F0000390000003E10000079020000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000990200007D070000CD030000 + + + 16 + 220F0000390000003E10000079020000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 34020000660000007D070000C6000000 + + + 16 + 220F000039000000EA110000C9000000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 220F0000390000001210000004010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 966 + 0 + 8192 + 0 + + 16 + 0000000000000000D10300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000E603000080070000F9030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 0 + 0 + 0 + 0 + 476 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 1 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 000000001C0000006F02000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300001E0300007D070000CD030000 + + + 16 + 220F0000390000001210000004010000 + + + + 3312 + 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFF31020000DF00000080070000E3000000010000000100001004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000B109000066000000000F0000F6000000310200004F00000080070000DF0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000200C000066000000100D000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF2D0200004F00000031020000030300000100000002000010040000000100000012FFFFFF87060000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000008007000066000000AD0900001A030000000000004F0000002D020000030300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF0000000003030000800700000703000001000000010000100400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000001000000440B00001E030000000F0000FD030000C40300000703000080070000E603000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7301000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727301000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF000000000000000001000000000000000100000001000000FFFFFFFFC003000007030000C4030000E603000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF000000007E0200008007000082020000000000000100000004000000010000001FFDFFFFAB000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000000000008007000099020000000F0000FD030000000000008202000080070000E60300000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2552 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000005464F4E54539600000000000000010005464F4E545300000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 980 + 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000004001D000000000000000000000000000000000100000001000000018030800000000004001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000004006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000400000000000000000000000000000000000001000000010000009600000003002050000000000A44656D6F20426F617264960000000000000001000A44656D6F20426F617264000000000180EB880000000004002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000400230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000004005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2362 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000004002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1920 + 1080 + + @@ -1862,39 +3603,66 @@ 0 100 - 3 + 1 + + ..\Application\app_uart.c + 37 + 84 + 105 + 1 + + 0 + ..\Application\main.c - 0 + 83 1 - 8 + 20 1 0 - ..\Application\board_config.h - 16 + ..\Application\oled_ssd1306\ssd1306.c + 0 1 - 22 + 2 1 0 - ..\Application\struct.h + ..\Application\oled_ssd1306\ssd1306_i2c.c 0 1 - 6 + 18 + 1 + + 0 + + + ..\SDK\Startup\startup_max32660.s + 0 + 151 + 160 1 0 - ..\Application\system_func.c - 32 + ..\Application\oled_ssd1306\ssd1306.h + 0 1 - 13 + 1 + 1 + + 0 + + + C:\Work\97. GitServer\AKM_Demo_Board\Project\Application\oled_ssd1306\font8x8.h + 9 + 21 + 35 1 0 diff --git a/Project/Compiler/AKM_Temperature_Demo.uvoptx b/Project/Compiler/AKM_Temperature_Demo.uvoptx index 1930b64..c9a0c0d 100644 --- a/Project/Compiler/AKM_Temperature_Demo.uvoptx +++ b/Project/Compiler/AKM_Temperature_Demo.uvoptx @@ -117,10 +117,30 @@ BIN\CMSIS_AGDI.dll + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + 0 CMSIS_AGDI - -X"" -O206 -S0 -C0 -P00000000 -N00("") -D00(00000000) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0MAX32660.FLM -FS00 -FL040000 -FP0($$Device:MAX32660$Flash\MAX32660.FLM) + -X"" -O206 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0MAX32660.FLM -FS00 -FL040000 -FP0($$Device:MAX32660$Flash\MAX32660.FLM) 0 @@ -135,12 +155,12 @@ 0 1 - 0 + 1 0 0 0 0 - 0 + 1 0 0 0 @@ -235,17 +255,77 @@ 0 0 + + 1 + 5 + 1 + 0 + 0 + 0 + ..\Application\sw_timer.c + sw_timer.c + 0 + 0 + + + 1 + 6 + 1 + 0 + 0 + 0 + ..\Application\app_gpio_led.c + app_gpio_led.c + 0 + 0 + + + 1 + 7 + 1 + 0 + 0 + 0 + ..\Application\app_gpio_i2c.c + app_gpio_i2c.c + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + ..\Application\app_ring_buffer.c + app_ring_buffer.c + 0 + 0 + + + 1 + 9 + 1 + 0 + 0 + 0 + ..\Application\app_uart.c + app_uart.c + 0 + 0 + Device - 1 + 0 0 0 0 2 - 5 + 10 1 0 0 @@ -265,7 +345,7 @@ 0 3 - 6 + 11 2 0 0 @@ -285,7 +365,7 @@ 0 4 - 7 + 12 1 0 0 @@ -297,7 +377,7 @@ 4 - 8 + 13 1 0 0 @@ -309,7 +389,7 @@ 4 - 9 + 14 1 0 0 @@ -321,7 +401,7 @@ 4 - 10 + 15 1 0 0 @@ -333,7 +413,7 @@ 4 - 11 + 16 1 0 0 @@ -345,7 +425,7 @@ 4 - 12 + 17 1 0 0 @@ -357,7 +437,7 @@ 4 - 13 + 18 1 0 0 @@ -369,7 +449,7 @@ 4 - 14 + 19 1 0 0 @@ -381,7 +461,7 @@ 4 - 15 + 20 1 0 0 @@ -393,7 +473,7 @@ 4 - 16 + 21 1 0 0 @@ -405,7 +485,7 @@ 4 - 17 + 22 1 0 0 @@ -417,7 +497,7 @@ 4 - 18 + 23 1 0 0 @@ -429,7 +509,7 @@ 4 - 19 + 24 1 0 0 @@ -441,7 +521,7 @@ 4 - 20 + 25 1 0 0 @@ -453,7 +533,7 @@ 4 - 21 + 26 1 0 0 @@ -465,7 +545,7 @@ 4 - 22 + 27 1 0 0 @@ -477,7 +557,7 @@ 4 - 23 + 28 1 0 0 @@ -489,7 +569,7 @@ 4 - 24 + 29 1 0 0 @@ -501,7 +581,7 @@ 4 - 25 + 30 1 0 0 @@ -513,7 +593,7 @@ 4 - 26 + 31 1 0 0 @@ -525,7 +605,7 @@ 4 - 27 + 32 1 0 0 @@ -537,4 +617,36 @@ + + SSD1306 + 1 + 0 + 0 + 0 + + 5 + 33 + 1 + 1 + 0 + 0 + ..\Application\oled_ssd1306\ssd1306.c + ssd1306.c + 0 + 0 + + + 5 + 34 + 1 + 1 + 0 + 0 + ..\Application\oled_ssd1306\ssd1306_i2c.c + ssd1306_i2c.c + 0 + 0 + + + diff --git a/Project/Compiler/AKM_Temperature_Demo.uvprojx b/Project/Compiler/AKM_Temperature_Demo.uvprojx index d047761..e8b7f80 100644 --- a/Project/Compiler/AKM_Temperature_Demo.uvprojx +++ b/Project/Compiler/AKM_Temperature_Demo.uvprojx @@ -339,7 +339,7 @@ TARGET=32660,TARGET_REV=0x4131 - ..\SDK\Device;..\SDK\Device\Include;..\SDK\Driver\Include;..\SDK\Driver\Source;..\SDK\FlashLoader;..\SDK\Startup;..\Application;..\Application\common;..\Application\left;..\Application\right;..\Lib\Beflex;..\Lib\H3System;..\Application\sensor\accelometer\bma400;..\Application\sensor\bodytemp;..\Application\sensor\ppg;..\Application\eeprom;..\Application\sensor\proximity;..\Application\sensor\sar + ..\SDK\Device;..\SDK\Device\Include;..\SDK\Driver\Include;..\SDK\Driver\Source;..\SDK\FlashLoader;..\SDK\Startup;..\Application;..\Application\oled_ssd1306 @@ -403,6 +403,31 @@ 1 ..\Application\system_func.c + + sw_timer.c + 1 + ..\Application\sw_timer.c + + + app_gpio_led.c + 1 + ..\Application\app_gpio_led.c + + + app_gpio_i2c.c + 1 + ..\Application\app_gpio_i2c.c + + + app_ring_buffer.c + 1 + ..\Application\app_ring_buffer.c + + + app_uart.c + 1 + ..\Application\app_uart.c + @@ -535,6 +560,21 @@ + + SSD1306 + + + ssd1306.c + 1 + ..\Application\oled_ssd1306\ssd1306.c + + + ssd1306_i2c.c + 1 + ..\Application\oled_ssd1306\ssd1306_i2c.c + + + diff --git a/Project/Compiler/EventRecorderStub.scvd b/Project/Compiler/EventRecorderStub.scvd new file mode 100644 index 0000000..2956b29 --- /dev/null +++ b/Project/Compiler/EventRecorderStub.scvd @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Project/Compiler/Listings/AKM_Temperature_Demo.map b/Project/Compiler/Listings/AKM_Temperature_Demo.map index 31e9d09..fd8c7d7 100644 --- a/Project/Compiler/Listings/AKM_Temperature_Demo.map +++ b/Project/Compiler/Listings/AKM_Temperature_Demo.map @@ -4,10 +4,139 @@ Component: ARM Compiler 5.06 update 7 (build 960) Tool: armlink [4d3601] Section Cross References - main.o(i.main) refers to system_func.o(i.SystemCoreClockSet) for SystemCoreClockSet + main.o(i.Test_Process) refers to ssd1306.o(i.SSD1306_SetPosition) for SSD1306_SetPosition + main.o(i.Test_Process) refers to printf1.o(i.__0sprintf$1) for __2sprintf + main.o(i.Test_Process) refers to ssd1306.o(i.SSD1306_DrawString) for SSD1306_DrawString + main.o(i.Test_Process) refers to ssd1306.o(i.SSD1306_UpdateScreen) for SSD1306_UpdateScreen + main.o(i.Test_Process) refers to main.o(.data) for count main.o(i.main) refers to icc.o(i.ICC_Enable) for ICC_Enable + main.o(i.main) refers to system_func.o(i.SystemCoreClockSet) for SystemCoreClockSet + main.o(i.main) refers to app_uart.o(i.App_Uart_Initialization) for App_Uart_Initialization + main.o(i.main) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Initialization) for App_Gpio_I2C_Initialization + main.o(i.main) refers to app_gpio_led.o(i.App_Led_Initialization) for App_Led_Initialization + main.o(i.main) refers to app_gpio_led.o(i.App_Led_OutputSet) for App_Led_OutputSet + main.o(i.main) refers to sw_timer.o(i.SW_Timer_Callback_Register) for SW_Timer_Callback_Register + main.o(i.main) refers to ssd1306.o(i.SSD1306_Init) for SSD1306_Init + main.o(i.main) refers to printf1.o(i.__0printf$1) for __2printf + main.o(i.main) refers to ssd1306.o(i.SSD1306_NormalScreen) for SSD1306_NormalScreen + main.o(i.main) refers to ssd1306.o(i.SSD1306_ClearScreen) for SSD1306_ClearScreen + main.o(i.main) refers to ssd1306.o(i.SSD1306_DrawLine) for SSD1306_DrawLine + main.o(i.main) refers to ssd1306.o(i.SSD1306_SetPosition) for SSD1306_SetPosition + main.o(i.main) refers to ssd1306.o(i.SSD1306_DrawString) for SSD1306_DrawString + main.o(i.main) refers to ssd1306.o(i.SSD1306_UpdateScreen) for SSD1306_UpdateScreen + main.o(i.main) refers to mxc_delay.o(i.mxc_delay) for mxc_delay + main.o(i.main) refers to ssd1306.o(i.SSD1306_InverseScreen) for SSD1306_InverseScreen + main.o(i.main) refers to sw_timer.o(i.SW_Timer_Callback_Process) for SW_Timer_Callback_Process + main.o(i.main) refers to main.o(i.Test_Process) for Test_Process system_func.o(i.SystemCoreClockSet) refers to lp.o(i.LP_SetOperatingVoltage) for LP_SetOperatingVoltage + system_func.o(i.SystemCoreClockSet) refers to system_func.o(i.SystemTimerInitialization) for SystemTimerInitialization system_func.o(i.SystemCoreClockSet) refers to system_func.o(.data) for usTickCountDiv + system_func.o(i.SystemTimerInitialization) refers to system_func.o(i.SystemTimer_GetPeriodCount) for SystemTimer_GetPeriodCount + system_func.o(i.SystemTimerInitialization) refers to tmr.o(i.TMR_Disable) for TMR_Disable + system_func.o(i.SystemTimerInitialization) refers to tmr.o(i.TMR_Init) for TMR_Init + system_func.o(i.SystemTimerInitialization) refers to tmr.o(i.TMR_Config) for TMR_Config + system_func.o(i.SystemTimerInitialization) refers to nvic_table.o(i.NVIC_SetVector) for NVIC_SetVector + system_func.o(i.SystemTimerInitialization) refers to system_func.o(i.NVIC_EnableIRQ) for NVIC_EnableIRQ + system_func.o(i.SystemTimerInitialization) refers to tmr.o(i.TMR_Enable) for TMR_Enable + system_func.o(i.SystemTimerInitialization) refers to system_func.o(i.SystemTimer_Interrput_Handler) for SystemTimer_Interrput_Handler + system_func.o(i.SystemTimerInitialization) refers to system_func.o(.data) for msTickCount + system_func.o(i.SystemTimer_GetPeriodCount) refers to system_max32660.o(.data) for SystemCoreClock + system_func.o(i.SystemTimer_Get_TickCount) refers to system_func.o(.data) for msTickCount + system_func.o(i.SystemTimer_Interrput_Handler) refers to tmr.o(i.TMR_IntClear) for TMR_IntClear + system_func.o(i.SystemTimer_Interrput_Handler) refers to system_func.o(.data) for msTickCount + sw_timer.o(i.SW_Timer_Callback_Process) refers to system_func.o(i.SystemTimer_Get_TickCount) for SystemTimer_Get_TickCount + sw_timer.o(i.SW_Timer_Callback_Process) refers to sw_timer.o(.bss) for SW_Timer_Info + sw_timer.o(i.SW_Timer_Callback_Register) refers to system_func.o(i.SystemTimer_Get_TickCount) for SystemTimer_Get_TickCount + sw_timer.o(i.SW_Timer_Callback_Register) refers to sw_timer.o(.bss) for SW_Timer_Info + sw_timer.o(i.SW_Timer_Callback_UnRegister) refers to sw_timer.o(.bss) for SW_Timer_Info + app_gpio_led.o(i.App_Led_Initialization) refers to mxc_sys.o(i.SYS_ClockEnable) for SYS_ClockEnable + app_gpio_led.o(i.App_Led_Initialization) refers to gpio.o(i.GPIO_Config) for GPIO_Config + app_gpio_led.o(i.App_Led_Initialization) refers to app_gpio_led.o(i.App_Led_Off) for App_Led_Off + app_gpio_led.o(i.App_Led_Initialization) refers to sw_timer.o(i.SW_Timer_Callback_Register) for SW_Timer_Callback_Register + app_gpio_led.o(i.App_Led_Initialization) refers to app_gpio_led.o(.data) for App_Led_Ctrl_Info + app_gpio_led.o(i.App_Led_Initialization) refers to app_gpio_led.o(i.App_Led_Output_Process) for App_Led_Output_Process + app_gpio_led.o(i.App_Led_Off) refers to app_gpio_led.o(.data) for App_Led_Ctrl_Info + app_gpio_led.o(i.App_Led_On) refers to app_gpio_led.o(.data) for App_Led_Ctrl_Info + app_gpio_led.o(i.App_Led_OutputSet) refers to system_func.o(i.SystemTimer_Get_TickCount) for SystemTimer_Get_TickCount + app_gpio_led.o(i.App_Led_OutputSet) refers to app_gpio_led.o(.data) for App_Led_Ctrl_Info + app_gpio_led.o(i.App_Led_Output_Process) refers to system_func.o(i.SystemTimer_Get_TickCount) for SystemTimer_Get_TickCount + app_gpio_led.o(i.App_Led_Output_Process) refers to app_gpio_led.o(.data) for App_Led_Ctrl_Info + app_gpio_led.o(.data) refers to app_gpio_led.o(i.App_Led_On) for App_Led_On + app_gpio_led.o(.data) refers to app_gpio_led.o(i.App_Led_Off) for App_Led_Off + app_gpio_i2c.o(i.App_Gpio_I2C_Delay) refers to app_gpio_i2c.o(.data) for DelayCount + app_gpio_i2c.o(i.App_Gpio_I2C_Initialization) refers to mxc_sys.o(i.SYS_ClockEnable) for SYS_ClockEnable + app_gpio_i2c.o(i.App_Gpio_I2C_Initialization) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_Output) for App_Gpio_I2C_Port_Output + app_gpio_i2c.o(i.App_Gpio_I2C_Initialization) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_H) for App_Gpio_I2C_Port_H + app_gpio_i2c.o(i.App_Gpio_I2C_Initialization) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Stop) for App_Gpio_I2C_Stop + app_gpio_i2c.o(i.App_Gpio_I2C_Initialization) refers to app_gpio_i2c.o(.data) for DelayCount + app_gpio_i2c.o(i.App_Gpio_I2C_Port_Input) refers to gpio.o(i.GPIO_Config) for GPIO_Config + app_gpio_i2c.o(i.App_Gpio_I2C_Port_Output) refers to gpio.o(i.GPIO_Config) for GPIO_Config + app_gpio_i2c.o(i.App_Gpio_I2C_Read) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Start) for App_Gpio_I2C_Start + app_gpio_i2c.o(i.App_Gpio_I2C_Read) refers to app_gpio_i2c.o(i.App_Gpio_I2C_WriteData) for App_Gpio_I2C_WriteData + app_gpio_i2c.o(i.App_Gpio_I2C_Read) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Stop) for App_Gpio_I2C_Stop + app_gpio_i2c.o(i.App_Gpio_I2C_Read) refers to app_gpio_i2c.o(i.App_Gpio_I2C_ReadData) for App_Gpio_I2C_ReadData + app_gpio_i2c.o(i.App_Gpio_I2C_ReadData) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_Input) for App_Gpio_I2C_Port_Input + app_gpio_i2c.o(i.App_Gpio_I2C_ReadData) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_H) for App_Gpio_I2C_Port_H + app_gpio_i2c.o(i.App_Gpio_I2C_ReadData) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Delay) for App_Gpio_I2C_Delay + app_gpio_i2c.o(i.App_Gpio_I2C_ReadData) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_Read) for App_Gpio_I2C_Port_Read + app_gpio_i2c.o(i.App_Gpio_I2C_ReadData) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_L) for App_Gpio_I2C_Port_L + app_gpio_i2c.o(i.App_Gpio_I2C_ReadData) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_Output) for App_Gpio_I2C_Port_Output + app_gpio_i2c.o(i.App_Gpio_I2C_Start) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Delay) for App_Gpio_I2C_Delay + app_gpio_i2c.o(i.App_Gpio_I2C_Start) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_H) for App_Gpio_I2C_Port_H + app_gpio_i2c.o(i.App_Gpio_I2C_Start) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_L) for App_Gpio_I2C_Port_L + app_gpio_i2c.o(i.App_Gpio_I2C_Stop) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_L) for App_Gpio_I2C_Port_L + app_gpio_i2c.o(i.App_Gpio_I2C_Stop) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_Output) for App_Gpio_I2C_Port_Output + app_gpio_i2c.o(i.App_Gpio_I2C_Stop) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Delay) for App_Gpio_I2C_Delay + app_gpio_i2c.o(i.App_Gpio_I2C_Stop) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_H) for App_Gpio_I2C_Port_H + app_gpio_i2c.o(i.App_Gpio_I2C_Write) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Start) for App_Gpio_I2C_Start + app_gpio_i2c.o(i.App_Gpio_I2C_Write) refers to app_gpio_i2c.o(i.App_Gpio_I2C_WriteData) for App_Gpio_I2C_WriteData + app_gpio_i2c.o(i.App_Gpio_I2C_Write) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Stop) for App_Gpio_I2C_Stop + app_gpio_i2c.o(i.App_Gpio_I2C_WriteData) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_Output) for App_Gpio_I2C_Port_Output + app_gpio_i2c.o(i.App_Gpio_I2C_WriteData) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_H) for App_Gpio_I2C_Port_H + app_gpio_i2c.o(i.App_Gpio_I2C_WriteData) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_L) for App_Gpio_I2C_Port_L + app_gpio_i2c.o(i.App_Gpio_I2C_WriteData) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Delay) for App_Gpio_I2C_Delay + app_gpio_i2c.o(i.App_Gpio_I2C_WriteData) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_Input) for App_Gpio_I2C_Port_Input + app_gpio_i2c.o(i.App_Gpio_I2C_WriteData) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Port_Read) for App_Gpio_I2C_Port_Read + app_ring_buffer.o(i.RingBuffer_Dequeue) refers to app_ring_buffer.o(i.RingBuffer_isEmpty) for RingBuffer_isEmpty + app_ring_buffer.o(i.RingBuffer_Enqueue) refers to app_ring_buffer.o(i.RingBuffer_isFull) for RingBuffer_isFull + app_ring_buffer.o(i.RingBuffer_Enqueue) refers to app_ring_buffer.o(i.RingBuffer_Dequeue) for RingBuffer_Dequeue + app_ring_buffer.o(i.RingBuffer_Get_DataSize) refers to app_ring_buffer.o(i.RingBuffer_isEmpty) for RingBuffer_isEmpty + app_uart.o(i.App_Uart_Data_Transmit_Check) refers to app_ring_buffer.o(i.RingBuffer_Get_DataSize) for RingBuffer_Get_DataSize + app_uart.o(i.App_Uart_Data_Transmit_Check) refers to uart.o(i.UART_Busy) for UART_Busy + app_uart.o(i.App_Uart_Data_Transmit_Check) refers to app_ring_buffer.o(i.RingBuffer_GetData) for RingBuffer_GetData + app_uart.o(i.App_Uart_Data_Transmit_Check) refers to uart.o(i.UART_WriteByte) for UART_WriteByte + app_uart.o(i.App_Uart_Data_Transmit_Check) refers to app_ring_buffer.o(i.RingBuffer_PopData) for RingBuffer_PopData + app_uart.o(i.App_Uart_Data_Transmit_Check) refers to app_uart.o(.bss) for Tx_RingBuffer + app_uart.o(i.App_Uart_Get_Last_Error) refers to app_uart.o(.data) for UartError + app_uart.o(i.App_Uart_Get_Recv_Data) refers to app_ring_buffer.o(i.RingBuffer_Get_DataSize) for RingBuffer_Get_DataSize + app_uart.o(i.App_Uart_Get_Recv_Data) refers to app_ring_buffer.o(i.RingBuffer_Dequeue) for RingBuffer_Dequeue + app_uart.o(i.App_Uart_Get_Recv_Data) refers to app_uart.o(.bss) for Rx_RingBuffer + app_uart.o(i.App_Uart_Initialization) refers to uart.o(i.UART_Init) for UART_Init + app_uart.o(i.App_Uart_Initialization) refers to app_uart.o(i.NVIC_ClearPendingIRQ) for NVIC_ClearPendingIRQ + app_uart.o(i.App_Uart_Initialization) refers to app_uart.o(i.NVIC_DisableIRQ) for NVIC_DisableIRQ + app_uart.o(i.App_Uart_Initialization) refers to nvic_table.o(i.NVIC_SetVector) for NVIC_SetVector + app_uart.o(i.App_Uart_Initialization) refers to app_uart.o(i.NVIC_EnableIRQ) for NVIC_EnableIRQ + app_uart.o(i.App_Uart_Initialization) refers to uart.o(i.UART_ClearFlags) for UART_ClearFlags + app_uart.o(i.App_Uart_Initialization) refers to app_ring_buffer.o(i.RingBuffer_Initialization) for RingBuffer_Initialization + app_uart.o(i.App_Uart_Initialization) refers to app_uart.o(i.App_Uart_Read_Callback_Initialization) for App_Uart_Read_Callback_Initialization + app_uart.o(i.App_Uart_Initialization) refers to sw_timer.o(i.SW_Timer_Callback_Register) for SW_Timer_Callback_Register + app_uart.o(i.App_Uart_Initialization) refers to app_uart.o(.data) for UartError + app_uart.o(i.App_Uart_Initialization) refers to app_uart.o(i.App_Uart_Interrupt_Handler) for App_Uart_Interrupt_Handler + app_uart.o(i.App_Uart_Initialization) refers to app_uart.o(.bss) for TxBuffer + app_uart.o(i.App_Uart_Initialization) refers to app_uart.o(i.App_Uart_Data_Transmit_Check) for App_Uart_Data_Transmit_Check + app_uart.o(i.App_Uart_Interrupt_Handler) refers to uart.o(i.UART_Handler) for UART_Handler + app_uart.o(i.App_Uart_Read_Callback) refers to app_ring_buffer.o(i.RingBuffer_Enqueue) for RingBuffer_Enqueue + app_uart.o(i.App_Uart_Read_Callback) refers to app_uart.o(i.App_Uart_Read_Callback_Initialization) for App_Uart_Read_Callback_Initialization + app_uart.o(i.App_Uart_Read_Callback) refers to app_uart.o(.data) for RxData + app_uart.o(i.App_Uart_Read_Callback) refers to app_uart.o(.bss) for Rx_RingBuffer + app_uart.o(i.App_Uart_Read_Callback_Initialization) refers to uart.o(i.UART_ReadAsync) for UART_ReadAsync + app_uart.o(i.App_Uart_Read_Callback_Initialization) refers to app_uart.o(.data) for RxData + app_uart.o(i.App_Uart_Read_Callback_Initialization) refers to app_uart.o(.bss) for App_Uart_Read_Req + app_uart.o(i.App_Uart_Read_Callback_Initialization) refers to app_uart.o(i.App_Uart_Read_Callback) for App_Uart_Read_Callback + app_uart.o(i.App_Uart_Transmit) refers to app_ring_buffer.o(i.RingBuffer_Enqueue) for RingBuffer_Enqueue + app_uart.o(i.App_Uart_Transmit) refers to app_uart.o(.bss) for Tx_RingBuffer + app_uart.o(i.fputc) refers to app_ring_buffer.o(i.RingBuffer_Enqueue) for RingBuffer_Enqueue + app_uart.o(i.fputc) refers to app_uart.o(.bss) for Tx_RingBuffer system_max32660.o(i.$Sub$$__main_after_scatterload) refers to system_max32660.o(i.SystemInit) for SystemInit system_max32660.o(i.$Sub$$__main_after_scatterload) refers to entry5.o(.ARM.Collect$$$$00000004) for $Super$$__main_after_scatterload system_max32660.o(i.SystemCoreClockUpdate) refers to system_max32660.o(.data) for SystemCoreClock @@ -339,6 +468,42 @@ Section Cross References uart.o(i.UART_WriteHandler) refers to uart.o(.data) for tx_states uart.o(i.uart_error_clear) refers to uart.o(i.UART_ClearFlags) for UART_ClearFlags wdt.o(i.WDT_Init) refers to mxc_sys.o(i.SYS_WDT_Init) for SYS_WDT_Init + ssd1306.o(i.SSD1306_ClearScreen) refers to memseta.o(.text) for __aeabi_memclr + ssd1306.o(i.SSD1306_ClearScreen) refers to ssd1306.o(.bss) for cacheMemLcd + ssd1306.o(i.SSD1306_DrawChar) refers to ssd1306.o(i.SSD1306_UpdatePosition) for SSD1306_UpdatePosition + ssd1306.o(i.SSD1306_DrawChar) refers to ssd1306.o(.constdata) for FONTS + ssd1306.o(i.SSD1306_DrawChar) refers to ssd1306.o(.data) for _counter + ssd1306.o(i.SSD1306_DrawChar) refers to ssd1306.o(.bss) for cacheMemLcd + ssd1306.o(i.SSD1306_DrawLine) refers to ssd1306.o(i.SSD1306_DrawPixel) for SSD1306_DrawPixel + ssd1306.o(i.SSD1306_DrawPixel) refers to ssd1306.o(.data) for _counter + ssd1306.o(i.SSD1306_DrawPixel) refers to ssd1306.o(.bss) for cacheMemLcd + ssd1306.o(i.SSD1306_DrawString) refers to ssd1306.o(i.SSD1306_DrawChar) for SSD1306_DrawChar + ssd1306.o(i.SSD1306_Init) refers to ssd1306.o(i.SSD1306_Send_StartAndSLAW) for SSD1306_Send_StartAndSLAW + ssd1306.o(i.SSD1306_Init) refers to ssd1306.o(i.SSD1306_Send_Command) for SSD1306_Send_Command + ssd1306.o(i.SSD1306_Init) refers to ssd1306_i2c.o(i.TWI_Stop) for TWI_Stop + ssd1306.o(i.SSD1306_Init) refers to ssd1306.o(.constdata) for INIT_SSD1306 + ssd1306.o(i.SSD1306_InverseScreen) refers to ssd1306.o(i.SSD1306_Send_StartAndSLAW) for SSD1306_Send_StartAndSLAW + ssd1306.o(i.SSD1306_InverseScreen) refers to ssd1306_i2c.o(i.TWI_Stop) for TWI_Stop + ssd1306.o(i.SSD1306_InverseScreen) refers to ssd1306.o(i.SSD1306_Send_Command) for SSD1306_Send_Command + ssd1306.o(i.SSD1306_NormalScreen) refers to ssd1306.o(i.SSD1306_Send_StartAndSLAW) for SSD1306_Send_StartAndSLAW + ssd1306.o(i.SSD1306_NormalScreen) refers to ssd1306_i2c.o(i.TWI_Stop) for TWI_Stop + ssd1306.o(i.SSD1306_NormalScreen) refers to ssd1306.o(i.SSD1306_Send_Command) for SSD1306_Send_Command + ssd1306.o(i.SSD1306_Send_Command) refers to ssd1306_i2c.o(i.TWI_MT_Send_Data) for TWI_MT_Send_Data + ssd1306.o(i.SSD1306_Send_Command) refers to ssd1306_i2c.o(i.TWI_Stop) for TWI_Stop + ssd1306.o(i.SSD1306_Send_StartAndSLAW) refers to ssd1306_i2c.o(i.TWI_MT_Start) for TWI_MT_Start + ssd1306.o(i.SSD1306_Send_StartAndSLAW) refers to ssd1306_i2c.o(i.TWI_Stop) for TWI_Stop + ssd1306.o(i.SSD1306_Send_StartAndSLAW) refers to ssd1306_i2c.o(i.TWI_MT_Send_SLAW) for TWI_MT_Send_SLAW + ssd1306.o(i.SSD1306_SetPosition) refers to ssd1306.o(.data) for _counter + ssd1306.o(i.SSD1306_UpdatePosition) refers to ssd1306.o(.data) for _counter + ssd1306.o(i.SSD1306_UpdateScreen) refers to ssd1306.o(i.SSD1306_Send_StartAndSLAW) for SSD1306_Send_StartAndSLAW + ssd1306.o(i.SSD1306_UpdateScreen) refers to ssd1306_i2c.o(i.TWI_Stop) for TWI_Stop + ssd1306.o(i.SSD1306_UpdateScreen) refers to ssd1306_i2c.o(i.TWI_MT_Send_Data) for TWI_MT_Send_Data + ssd1306.o(i.SSD1306_UpdateScreen) refers to ssd1306.o(.bss) for cacheMemLcd + ssd1306_i2c.o(i.TWI_MR_Send_SLAR) refers to app_gpio_i2c.o(i.App_Gpio_I2C_WriteData) for App_Gpio_I2C_WriteData + ssd1306_i2c.o(i.TWI_MT_Send_Data) refers to app_gpio_i2c.o(i.App_Gpio_I2C_WriteData) for App_Gpio_I2C_WriteData + ssd1306_i2c.o(i.TWI_MT_Send_SLAW) refers to app_gpio_i2c.o(i.App_Gpio_I2C_WriteData) for App_Gpio_I2C_WriteData + ssd1306_i2c.o(i.TWI_MT_Start) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Start) for App_Gpio_I2C_Start + ssd1306_i2c.o(i.TWI_Stop) refers to app_gpio_i2c.o(i.App_Gpio_I2C_Stop) for App_Gpio_I2C_Stop entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry10a.o(.ARM.Collect$$$$0000000F) for __rt_final_cpp entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry11a.o(.ARM.Collect$$$$00000011) for __rt_final_exit entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry12b.o(.ARM.Collect$$$$0000000E) for __rt_lib_shutdown_fini @@ -350,6 +515,242 @@ Section Cross References entry5.o(.ARM.Collect$$$$00000004) refers to init.o(.text) for __scatterload uldiv.o(.text) refers to llushr.o(.text) for __aeabi_llsr uldiv.o(.text) refers to llshl.o(.text) for __aeabi_llsl + printfb.o(i.__0fprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0fprintf$bare) refers to app_uart.o(i.fputc) for fputc + printfb.o(i.__0printf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0printf$bare) refers to app_uart.o(i.fputc) for fputc + printfb.o(i.__0printf$bare) refers to stdout.o(.data) for __stdout + printfb.o(i.__0snprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0snprintf$bare) refers to printfb.o(i._snputc) for _snputc + printfb.o(i.__0sprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0sprintf$bare) refers to printfb.o(i._sputc) for _sputc + printfb.o(i.__0vfprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0vfprintf$bare) refers to app_uart.o(i.fputc) for fputc + printfb.o(i.__0vprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0vprintf$bare) refers to app_uart.o(i.fputc) for fputc + printfb.o(i.__0vprintf$bare) refers to stdout.o(.data) for __stdout + printfb.o(i.__0vsnprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0vsnprintf$bare) refers to printfb.o(i._snputc) for _snputc + printfb.o(i.__0vsprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0vsprintf$bare) refers to printfb.o(i._sputc) for _sputc + printf0.o(i.__0fprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0fprintf$0) refers to app_uart.o(i.fputc) for fputc + printf0.o(i.__0printf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0printf$0) refers to app_uart.o(i.fputc) for fputc + printf0.o(i.__0printf$0) refers to stdout.o(.data) for __stdout + printf0.o(i.__0snprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0snprintf$0) refers to printf0.o(i._snputc) for _snputc + printf0.o(i.__0sprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0sprintf$0) refers to printf0.o(i._sputc) for _sputc + printf0.o(i.__0vfprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0vfprintf$0) refers to app_uart.o(i.fputc) for fputc + printf0.o(i.__0vprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0vprintf$0) refers to app_uart.o(i.fputc) for fputc + printf0.o(i.__0vprintf$0) refers to stdout.o(.data) for __stdout + printf0.o(i.__0vsnprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0vsnprintf$0) refers to printf0.o(i._snputc) for _snputc + printf0.o(i.__0vsprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0vsprintf$0) refers to printf0.o(i._sputc) for _sputc + printf1.o(i.__0fprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0fprintf$1) refers to app_uart.o(i.fputc) for fputc + printf1.o(i.__0printf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0printf$1) refers to app_uart.o(i.fputc) for fputc + printf1.o(i.__0printf$1) refers to stdout.o(.data) for __stdout + printf1.o(i.__0snprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0snprintf$1) refers to printf1.o(i._snputc) for _snputc + printf1.o(i.__0sprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0sprintf$1) refers to printf1.o(i._sputc) for _sputc + printf1.o(i.__0vfprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0vfprintf$1) refers to app_uart.o(i.fputc) for fputc + printf1.o(i.__0vprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0vprintf$1) refers to app_uart.o(i.fputc) for fputc + printf1.o(i.__0vprintf$1) refers to stdout.o(.data) for __stdout + printf1.o(i.__0vsnprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0vsnprintf$1) refers to printf1.o(i._snputc) for _snputc + printf1.o(i.__0vsprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0vsprintf$1) refers to printf1.o(i._sputc) for _sputc + printf1.o(i._printf_core) refers to uidiv.o(.text) for __aeabi_uidivmod + printf2.o(i.__0fprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0fprintf$2) refers to app_uart.o(i.fputc) for fputc + printf2.o(i.__0printf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0printf$2) refers to app_uart.o(i.fputc) for fputc + printf2.o(i.__0printf$2) refers to stdout.o(.data) for __stdout + printf2.o(i.__0snprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0snprintf$2) refers to printf2.o(i._snputc) for _snputc + printf2.o(i.__0sprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0sprintf$2) refers to printf2.o(i._sputc) for _sputc + printf2.o(i.__0vfprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0vfprintf$2) refers to app_uart.o(i.fputc) for fputc + printf2.o(i.__0vprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0vprintf$2) refers to app_uart.o(i.fputc) for fputc + printf2.o(i.__0vprintf$2) refers to stdout.o(.data) for __stdout + printf2.o(i.__0vsnprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0vsnprintf$2) refers to printf2.o(i._snputc) for _snputc + printf2.o(i.__0vsprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0vsprintf$2) refers to printf2.o(i._sputc) for _sputc + printf3.o(i.__0fprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0fprintf$3) refers to app_uart.o(i.fputc) for fputc + printf3.o(i.__0printf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0printf$3) refers to app_uart.o(i.fputc) for fputc + printf3.o(i.__0printf$3) refers to stdout.o(.data) for __stdout + printf3.o(i.__0snprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0snprintf$3) refers to printf3.o(i._snputc) for _snputc + printf3.o(i.__0sprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0sprintf$3) refers to printf3.o(i._sputc) for _sputc + printf3.o(i.__0vfprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0vfprintf$3) refers to app_uart.o(i.fputc) for fputc + printf3.o(i.__0vprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0vprintf$3) refers to app_uart.o(i.fputc) for fputc + printf3.o(i.__0vprintf$3) refers to stdout.o(.data) for __stdout + printf3.o(i.__0vsnprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0vsnprintf$3) refers to printf3.o(i._snputc) for _snputc + printf3.o(i.__0vsprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0vsprintf$3) refers to printf3.o(i._sputc) for _sputc + printf3.o(i._printf_core) refers to uidiv.o(.text) for __aeabi_uidivmod + printf4.o(i.__0fprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0fprintf$4) refers to app_uart.o(i.fputc) for fputc + printf4.o(i.__0printf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0printf$4) refers to app_uart.o(i.fputc) for fputc + printf4.o(i.__0printf$4) refers to stdout.o(.data) for __stdout + printf4.o(i.__0snprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0snprintf$4) refers to printf4.o(i._snputc) for _snputc + printf4.o(i.__0sprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0sprintf$4) refers to printf4.o(i._sputc) for _sputc + printf4.o(i.__0vfprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0vfprintf$4) refers to app_uart.o(i.fputc) for fputc + printf4.o(i.__0vprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0vprintf$4) refers to app_uart.o(i.fputc) for fputc + printf4.o(i.__0vprintf$4) refers to stdout.o(.data) for __stdout + printf4.o(i.__0vsnprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0vsnprintf$4) refers to printf4.o(i._snputc) for _snputc + printf4.o(i.__0vsprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0vsprintf$4) refers to printf4.o(i._sputc) for _sputc + printf4.o(i._printf_core) refers to uldiv.o(.text) for __aeabi_uldivmod + printf5.o(i.__0fprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0fprintf$5) refers to app_uart.o(i.fputc) for fputc + printf5.o(i.__0printf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0printf$5) refers to app_uart.o(i.fputc) for fputc + printf5.o(i.__0printf$5) refers to stdout.o(.data) for __stdout + printf5.o(i.__0snprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0snprintf$5) refers to printf5.o(i._snputc) for _snputc + printf5.o(i.__0sprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0sprintf$5) refers to printf5.o(i._sputc) for _sputc + printf5.o(i.__0vfprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0vfprintf$5) refers to app_uart.o(i.fputc) for fputc + printf5.o(i.__0vprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0vprintf$5) refers to app_uart.o(i.fputc) for fputc + printf5.o(i.__0vprintf$5) refers to stdout.o(.data) for __stdout + printf5.o(i.__0vsnprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0vsnprintf$5) refers to printf5.o(i._snputc) for _snputc + printf5.o(i.__0vsprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0vsprintf$5) refers to printf5.o(i._sputc) for _sputc + printf5.o(i._printf_core) refers to uldiv.o(.text) for __aeabi_uldivmod + printf6.o(i.__0fprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0fprintf$6) refers to app_uart.o(i.fputc) for fputc + printf6.o(i.__0printf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0printf$6) refers to app_uart.o(i.fputc) for fputc + printf6.o(i.__0printf$6) refers to stdout.o(.data) for __stdout + printf6.o(i.__0snprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0snprintf$6) refers to printf6.o(i._snputc) for _snputc + printf6.o(i.__0sprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0sprintf$6) refers to printf6.o(i._sputc) for _sputc + printf6.o(i.__0vfprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0vfprintf$6) refers to app_uart.o(i.fputc) for fputc + printf6.o(i.__0vprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0vprintf$6) refers to app_uart.o(i.fputc) for fputc + printf6.o(i.__0vprintf$6) refers to stdout.o(.data) for __stdout + printf6.o(i.__0vsnprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0vsnprintf$6) refers to printf6.o(i._snputc) for _snputc + printf6.o(i.__0vsprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0vsprintf$6) refers to printf6.o(i._sputc) for _sputc + printf6.o(i._printf_core) refers to printf6.o(i._printf_pre_padding) for _printf_pre_padding + printf6.o(i._printf_core) refers to uidiv.o(.text) for __aeabi_uidivmod + printf6.o(i._printf_core) refers to printf6.o(i._printf_post_padding) for _printf_post_padding + printf7.o(i.__0fprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0fprintf$7) refers to app_uart.o(i.fputc) for fputc + printf7.o(i.__0printf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0printf$7) refers to app_uart.o(i.fputc) for fputc + printf7.o(i.__0printf$7) refers to stdout.o(.data) for __stdout + printf7.o(i.__0snprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0snprintf$7) refers to printf7.o(i._snputc) for _snputc + printf7.o(i.__0sprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0sprintf$7) refers to printf7.o(i._sputc) for _sputc + printf7.o(i.__0vfprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0vfprintf$7) refers to app_uart.o(i.fputc) for fputc + printf7.o(i.__0vprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0vprintf$7) refers to app_uart.o(i.fputc) for fputc + printf7.o(i.__0vprintf$7) refers to stdout.o(.data) for __stdout + printf7.o(i.__0vsnprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0vsnprintf$7) refers to printf7.o(i._snputc) for _snputc + printf7.o(i.__0vsprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0vsprintf$7) refers to printf7.o(i._sputc) for _sputc + printf7.o(i._printf_core) refers to printf7.o(i._printf_pre_padding) for _printf_pre_padding + printf7.o(i._printf_core) refers to uldiv.o(.text) for __aeabi_uldivmod + printf7.o(i._printf_core) refers to printf7.o(i._printf_post_padding) for _printf_post_padding + printf8.o(i.__0fprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0fprintf$8) refers to app_uart.o(i.fputc) for fputc + printf8.o(i.__0printf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0printf$8) refers to app_uart.o(i.fputc) for fputc + printf8.o(i.__0printf$8) refers to stdout.o(.data) for __stdout + printf8.o(i.__0snprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0snprintf$8) refers to printf8.o(i._snputc) for _snputc + printf8.o(i.__0sprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0sprintf$8) refers to printf8.o(i._sputc) for _sputc + printf8.o(i.__0vfprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0vfprintf$8) refers to app_uart.o(i.fputc) for fputc + printf8.o(i.__0vprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0vprintf$8) refers to app_uart.o(i.fputc) for fputc + printf8.o(i.__0vprintf$8) refers to stdout.o(.data) for __stdout + printf8.o(i.__0vsnprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0vsnprintf$8) refers to printf8.o(i._snputc) for _snputc + printf8.o(i.__0vsprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0vsprintf$8) refers to printf8.o(i._sputc) for _sputc + printf8.o(i._printf_core) refers to printf8.o(i._printf_pre_padding) for _printf_pre_padding + printf8.o(i._printf_core) refers to uldiv.o(.text) for __aeabi_uldivmod + printf8.o(i._printf_core) refers to printf8.o(i._printf_post_padding) for _printf_post_padding + printfa.o(i.__0fprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0fprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0fprintf) refers to app_uart.o(i.fputc) for fputc + printfa.o(i.__0printf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0printf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0printf) refers to app_uart.o(i.fputc) for fputc + printfa.o(i.__0printf) refers to stdout.o(.data) for __stdout + printfa.o(i.__0snprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0snprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0snprintf) refers to printfa.o(i._snputc) for _snputc + printfa.o(i.__0sprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0sprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0sprintf) refers to printfa.o(i._sputc) for _sputc + printfa.o(i.__0vfprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0vfprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0vfprintf) refers to app_uart.o(i.fputc) for fputc + printfa.o(i.__0vprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0vprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0vprintf) refers to app_uart.o(i.fputc) for fputc + printfa.o(i.__0vprintf) refers to stdout.o(.data) for __stdout + printfa.o(i.__0vsnprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0vsnprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0vsnprintf) refers to printfa.o(i._snputc) for _snputc + printfa.o(i.__0vsprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0vsprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0vsprintf) refers to printfa.o(i._sputc) for _sputc + printfa.o(i._fp_digits) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i._fp_digits) refers to dmul.o(.text) for __aeabi_dmul + printfa.o(i._fp_digits) refers to ddiv.o(.text) for __aeabi_ddiv + printfa.o(i._fp_digits) refers to cdrcmple.o(.text) for __aeabi_cdrcmple + printfa.o(i._fp_digits) refers to dadd.o(.text) for __aeabi_dadd + printfa.o(i._fp_digits) refers to dfixul.o(.text) for __aeabi_d2ulz + printfa.o(i._fp_digits) refers to uldiv.o(.text) for __aeabi_uldivmod + printfa.o(i._printf_core) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i._printf_core) refers to printfa.o(i._printf_pre_padding) for _printf_pre_padding + printfa.o(i._printf_core) refers to uldiv.o(.text) for __aeabi_uldivmod + printfa.o(i._printf_core) refers to printfa.o(i._printf_post_padding) for _printf_post_padding + printfa.o(i._printf_core) refers to printfa.o(i._fp_digits) for _fp_digits + printfa.o(i._printf_core) refers to uidiv.o(.text) for __aeabi_uidivmod + printfa.o(i._printf_post_padding) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i._printf_pre_padding) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i._snputc) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i._sputc) refers (Special) to iusefp.o(.text) for __I$use$fp entry2.o(.ARM.Collect$$$$00000001) refers to entry2.o(.ARM.Collect$$$$00002712) for __lit__00000000 entry2.o(.ARM.Collect$$$$00002712) refers to startup_max32660.o(STACK) for __initial_sp entry2.o(__vectab_stack_and_reset_area) refers to startup_max32660.o(STACK) for __initial_sp @@ -357,6 +758,15 @@ Section Cross References entry9a.o(.ARM.Collect$$$$0000000B) refers to main.o(i.main) for main entry9b.o(.ARM.Collect$$$$0000000C) refers to main.o(i.main) for main init.o(.text) refers to system_max32660.o(i.$Sub$$__main_after_scatterload) for __main_after_scatterload + dadd.o(.text) refers to llshl.o(.text) for __aeabi_llsl + dadd.o(.text) refers to llsshr.o(.text) for __aeabi_lasr + dadd.o(.text) refers to depilogue.o(.text) for _double_epilogue + dmul.o(.text) refers to depilogue.o(.text) for _double_epilogue + ddiv.o(.text) refers to depilogue.o(.text) for _double_round + dfixul.o(.text) refers to llushr.o(.text) for __aeabi_llsr + dfixul.o(.text) refers to llshl.o(.text) for __aeabi_llsl + depilogue.o(.text) refers to llshl.o(.text) for __aeabi_llsl + depilogue.o(.text) refers to llushr.o(.text) for __aeabi_llsr ============================================================================== @@ -369,6 +779,25 @@ Removing Unused input sections from the image. Removing interrput_handler.o(.revsh_text), (4 bytes). Removing system_func.o(.rev16_text), (4 bytes). Removing system_func.o(.revsh_text), (4 bytes). + Removing sw_timer.o(.rev16_text), (4 bytes). + Removing sw_timer.o(.revsh_text), (4 bytes). + Removing sw_timer.o(i.SW_Timer_Callback_UnRegister), (56 bytes). + Removing app_gpio_led.o(.rev16_text), (4 bytes). + Removing app_gpio_led.o(.revsh_text), (4 bytes). + Removing app_gpio_i2c.o(.rev16_text), (4 bytes). + Removing app_gpio_i2c.o(.revsh_text), (4 bytes). + Removing app_gpio_i2c.o(i.App_Gpio_I2C_Read), (94 bytes). + Removing app_gpio_i2c.o(i.App_Gpio_I2C_ReadData), (148 bytes). + Removing app_gpio_i2c.o(i.App_Gpio_I2C_Write), (74 bytes). + Removing app_ring_buffer.o(.rev16_text), (4 bytes). + Removing app_ring_buffer.o(.revsh_text), (4 bytes). + Removing app_ring_buffer.o(i.RingBuffer_Clear), (28 bytes). + Removing app_uart.o(.rev16_text), (4 bytes). + Removing app_uart.o(.revsh_text), (4 bytes). + Removing app_uart.o(i.App_Uart_Get_Last_Error), (12 bytes). + Removing app_uart.o(i.App_Uart_Get_Recv_Data), (32 bytes). + Removing app_uart.o(i.App_Uart_Transmit), (20 bytes). + Removing app_uart.o(i.printf_none), (8 bytes). Removing system_max32660.o(.rev16_text), (4 bytes). Removing system_max32660.o(.revsh_text), (4 bytes). Removing startup_max32660.o(HEAP), (4096 bytes). @@ -403,7 +832,6 @@ Removing Unused input sections from the image. Removing flc.o(i.FLC_UnlockInfoBlock), (36 bytes). Removing gpio.o(.rev16_text), (4 bytes). Removing gpio.o(.revsh_text), (4 bytes). - Removing gpio.o(i.GPIO_Config), (248 bytes). Removing gpio.o(i.GPIO_Handler), (100 bytes). Removing gpio.o(i.GPIO_InGet), (28 bytes). Removing gpio.o(i.GPIO_Init), (48 bytes). @@ -517,19 +945,14 @@ Removing Unused input sections from the image. Removing mxc_assert.o(i.mxc_assert), (4 bytes). Removing mxc_delay.o(.rev16_text), (4 bytes). Removing mxc_delay.o(.revsh_text), (4 bytes). - Removing mxc_delay.o(i.mxc_delay), (128 bytes). Removing mxc_lock.o(.rev16_text), (4 bytes). Removing mxc_lock.o(.revsh_text), (4 bytes). - Removing mxc_lock.o(i.mxc_free_lock), (10 bytes). - Removing mxc_lock.o(i.mxc_get_lock), (32 bytes). Removing mxc_pins.o(.rev16_text), (4 bytes). Removing mxc_pins.o(.revsh_text), (4 bytes). - Removing mxc_pins.o(.constdata), (192 bytes). Removing mxc_sys.o(.rev16_text), (4 bytes). Removing mxc_sys.o(.revsh_text), (4 bytes). Removing mxc_sys.o(i.NVIC_SetPriority), (40 bytes). Removing mxc_sys.o(i.SYS_ClockDisable_X32K), (20 bytes). - Removing mxc_sys.o(i.SYS_ClockEnable), (42 bytes). Removing mxc_sys.o(i.SYS_ClockEnable_X32K), (22 bytes). Removing mxc_sys.o(i.SYS_DMA_Init), (12 bytes). Removing mxc_sys.o(i.SYS_DMA_Shutdown), (12 bytes). @@ -555,17 +978,12 @@ Removing Unused input sections from the image. Removing mxc_sys.o(i.SYS_SysTick_Disable), (10 bytes). Removing mxc_sys.o(i.SYS_SysTick_GetFreq), (40 bytes). Removing mxc_sys.o(i.SYS_TMR_GetFreq), (16 bytes). - Removing mxc_sys.o(i.SYS_TMR_Init), (92 bytes). Removing mxc_sys.o(i.SYS_TMR_Shutdown), (6 bytes). - Removing mxc_sys.o(i.SYS_UART_Init), (156 bytes). Removing mxc_sys.o(i.SYS_UART_Shutdown), (44 bytes). Removing mxc_sys.o(i.SYS_WDT_Init), (6 bytes). Removing nvic_table.o(.rev16_text), (4 bytes). Removing nvic_table.o(.revsh_text), (4 bytes). Removing nvic_table.o(i.NVIC_GetVector), (20 bytes). - Removing nvic_table.o(i.NVIC_SetRAM), (36 bytes). - Removing nvic_table.o(i.NVIC_SetVector), (64 bytes). - Removing nvic_table.o(.bss), (284 bytes). Removing rtc.o(.rev16_text), (4 bytes). Removing rtc.o(.revsh_text), (4 bytes). Removing rtc.o(i.RTC_CheckBusy), (52 bytes). @@ -634,16 +1052,11 @@ Removing Unused input sections from the image. Removing spimss.o(.data), (4 bytes). Removing tmr.o(.rev16_text), (4 bytes). Removing tmr.o(.revsh_text), (4 bytes). - Removing tmr.o(i.TMR_Config), (42 bytes). - Removing tmr.o(i.TMR_Disable), (10 bytes). - Removing tmr.o(i.TMR_Enable), (10 bytes). Removing tmr.o(i.TMR_GetCapture), (6 bytes). Removing tmr.o(i.TMR_GetCompare), (6 bytes). Removing tmr.o(i.TMR_GetCount), (6 bytes). Removing tmr.o(i.TMR_GetTicks), (196 bytes). Removing tmr.o(i.TMR_GetTime), (380 bytes). - Removing tmr.o(i.TMR_Init), (42 bytes). - Removing tmr.o(i.TMR_IntClear), (6 bytes). Removing tmr.o(i.TMR_IntStatus), (6 bytes). Removing tmr.o(i.TMR_PWMConfig), (54 bytes). Removing tmr.o(i.TMR_PWMSetDuty), (50 bytes). @@ -665,30 +1078,19 @@ Removing Unused input sections from the image. Removing uart.o(.rev16_text), (4 bytes). Removing uart.o(.revsh_text), (4 bytes). Removing uart.o(i.UART_AbortAsync), (232 bytes). - Removing uart.o(i.UART_Busy), (88 bytes). - Removing uart.o(i.UART_ClearFlags), (4 bytes). Removing uart.o(i.UART_Disable), (10 bytes). Removing uart.o(i.UART_DrainRX), (10 bytes). Removing uart.o(i.UART_DrainTX), (10 bytes). Removing uart.o(i.UART_Enable), (10 bytes). Removing uart.o(i.UART_GetFlags), (6 bytes). - Removing uart.o(i.UART_Handler), (104 bytes). - Removing uart.o(i.UART_Init), (220 bytes). - Removing uart.o(i.UART_NumReadAvail), (10 bytes). - Removing uart.o(i.UART_NumWriteAvail), (14 bytes). Removing uart.o(i.UART_PrepForSleep), (30 bytes). Removing uart.o(i.UART_Read), (212 bytes). - Removing uart.o(i.UART_ReadAsync), (164 bytes). Removing uart.o(i.UART_ReadByte), (20 bytes). - Removing uart.o(i.UART_ReadHandler), (208 bytes). Removing uart.o(i.UART_Shutdown), (184 bytes). Removing uart.o(i.UART_Write), (148 bytes). Removing uart.o(i.UART_WriteAsync), (144 bytes). - Removing uart.o(i.UART_WriteByte), (16 bytes). - Removing uart.o(i.UART_WriteHandler), (136 bytes). Removing uart.o(i.uart_error_check), (10 bytes). Removing uart.o(i.uart_error_clear), (14 bytes). - Removing uart.o(.data), (16 bytes). Removing wdt.o(.rev16_text), (4 bytes). Removing wdt.o(.revsh_text), (4 bytes). Removing wdt.o(i.WDT_ClearIntFlag), (10 bytes). @@ -702,8 +1104,19 @@ Removing Unused input sections from the image. Removing wdt.o(i.WDT_ResetTimer), (10 bytes). Removing wdt.o(i.WDT_SetIntPeriod), (10 bytes). Removing wdt.o(i.WDT_SetResetPeriod), (10 bytes). + Removing ssd1306.o(.rev16_text), (4 bytes). + Removing ssd1306.o(.revsh_text), (4 bytes). + Removing ssd1306_i2c.o(.rev16_text), (4 bytes). + Removing ssd1306_i2c.o(.revsh_text), (4 bytes). + Removing ssd1306_i2c.o(i.TWI_MR_Send_SLAR), (28 bytes). + Removing dadd.o(.text), (334 bytes). + Removing dmul.o(.text), (228 bytes). + Removing ddiv.o(.text), (222 bytes). + Removing dfixul.o(.text), (48 bytes). + Removing cdrcmple.o(.text), (48 bytes). + Removing depilogue.o(.text), (186 bytes). -339 unused section(s) (total 24764 bytes) removed from the image. +342 unused section(s) (total 24012 bytes) removed from the image. ============================================================================== @@ -714,29 +1127,57 @@ Image Symbol Table Symbol Name Value Ov Type Size Object(Section) RESET 0x00000000 Section 284 startup_max32660.o(RESET) + ../clib/microlib/division.c 0x00000000 Number 0 uidiv.o ABSOLUTE ../clib/microlib/division.c 0x00000000 Number 0 uldiv.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry12b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry12a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry12a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry12b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE - ../clib/microlib/longlong.c 0x00000000 Number 0 llshl.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE + ../clib/microlib/longlong.c 0x00000000 Number 0 llsshr.o ABSOLUTE ../clib/microlib/longlong.c 0x00000000 Number 0 llushr.o ABSOLUTE + ../clib/microlib/longlong.c 0x00000000 Number 0 llshl.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf1.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf2.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf3.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf4.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf7.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf6.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printfa.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf8.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf5.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printfb.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf0.o ABSOLUTE + ../clib/microlib/printf/stubs.s 0x00000000 Number 0 stubs.o ABSOLUTE + ../clib/microlib/stdio/streams.c 0x00000000 Number 0 stdout.o ABSOLUTE ../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpyb.o ABSOLUTE ../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpya.o ABSOLUTE ../clib/microlib/string/memset.c 0x00000000 Number 0 memseta.o ABSOLUTE + ../clib/microlib/stubs.s 0x00000000 Number 0 iusefp.o ABSOLUTE + ../fplib/microlib/fpadd.c 0x00000000 Number 0 dadd.o ABSOLUTE + ../fplib/microlib/fpdiv.c 0x00000000 Number 0 ddiv.o ABSOLUTE + ../fplib/microlib/fpepilogue.c 0x00000000 Number 0 depilogue.o ABSOLUTE + ../fplib/microlib/fpfix.c 0x00000000 Number 0 dfixul.o ABSOLUTE + ../fplib/microlib/fpmul.c 0x00000000 Number 0 dmul.o ABSOLUTE + ..\Application\app_gpio_i2c.c 0x00000000 Number 0 app_gpio_i2c.o ABSOLUTE + ..\Application\app_gpio_led.c 0x00000000 Number 0 app_gpio_led.o ABSOLUTE + ..\Application\app_ring_buffer.c 0x00000000 Number 0 app_ring_buffer.o ABSOLUTE + ..\Application\app_uart.c 0x00000000 Number 0 app_uart.o ABSOLUTE ..\Application\interrput_handler.c 0x00000000 Number 0 interrput_handler.o ABSOLUTE ..\Application\main.c 0x00000000 Number 0 main.o ABSOLUTE + ..\Application\oled_ssd1306\ssd1306.c 0x00000000 Number 0 ssd1306.o ABSOLUTE + ..\Application\oled_ssd1306\ssd1306_i2c.c 0x00000000 Number 0 ssd1306_i2c.o ABSOLUTE + ..\Application\sw_timer.c 0x00000000 Number 0 sw_timer.o ABSOLUTE ..\Application\system_func.c 0x00000000 Number 0 system_func.o ABSOLUTE ..\SDK\Device\system_max32660.c 0x00000000 Number 0 system_max32660.o ABSOLUTE ..\SDK\Driver\Source\dma.c 0x00000000 Number 0 dma.o ABSOLUTE @@ -761,8 +1202,15 @@ Image Symbol Table ..\SDK\Driver\Source\uart.c 0x00000000 Number 0 uart.o ABSOLUTE ..\SDK\Driver\Source\wdt.c 0x00000000 Number 0 wdt.o ABSOLUTE ..\SDK\Startup\startup_max32660.s 0x00000000 Number 0 startup_max32660.o ABSOLUTE + ..\\Application\\app_gpio_i2c.c 0x00000000 Number 0 app_gpio_i2c.o ABSOLUTE + ..\\Application\\app_gpio_led.c 0x00000000 Number 0 app_gpio_led.o ABSOLUTE + ..\\Application\\app_ring_buffer.c 0x00000000 Number 0 app_ring_buffer.o ABSOLUTE + ..\\Application\\app_uart.c 0x00000000 Number 0 app_uart.o ABSOLUTE ..\\Application\\interrput_handler.c 0x00000000 Number 0 interrput_handler.o ABSOLUTE ..\\Application\\main.c 0x00000000 Number 0 main.o ABSOLUTE + ..\\Application\\oled_ssd1306\\ssd1306.c 0x00000000 Number 0 ssd1306.o ABSOLUTE + ..\\Application\\oled_ssd1306\\ssd1306_i2c.c 0x00000000 Number 0 ssd1306_i2c.o ABSOLUTE + ..\\Application\\sw_timer.c 0x00000000 Number 0 sw_timer.o ABSOLUTE ..\\Application\\system_func.c 0x00000000 Number 0 system_func.o ABSOLUTE ..\\SDK\\Device\\system_max32660.c 0x00000000 Number 0 system_max32660.o ABSOLUTE ..\\SDK\\Driver\\Source\\dma.c 0x00000000 Number 0 dma.o ABSOLUTE @@ -786,6 +1234,7 @@ Image Symbol Table ..\\SDK\\Driver\\Source\\tmr_utils.c 0x00000000 Number 0 tmr_utils.o ABSOLUTE ..\\SDK\\Driver\\Source\\uart.c 0x00000000 Number 0 uart.o ABSOLUTE ..\\SDK\\Driver\\Source\\wdt.c 0x00000000 Number 0 wdt.o ABSOLUTE + cdrcmple.s 0x00000000 Number 0 cdrcmple.o ABSOLUTE dc.s 0x00000000 Number 0 dc.o ABSOLUTE handlers.s 0x00000000 Number 0 handlers.o ABSOLUTE init.s 0x00000000 Number 0 init.o ABSOLUTE @@ -803,52 +1252,234 @@ Image Symbol Table .text 0x00000134 Section 40 startup_max32660.o(.text) $v0 0x00000134 Number 0 startup_max32660.o(.text) .text 0x0000015c Section 0 uldiv.o(.text) - .text 0x000001c0 Section 36 init.o(.text) - .text 0x000001e4 Section 0 llshl.o(.text) - .text 0x00000202 Section 0 llushr.o(.text) - i.$Sub$$__main_after_scatterload 0x00000222 Section 0 system_max32660.o(i.$Sub$$__main_after_scatterload) - i.Board_Init 0x0000022e Section 0 system_max32660.o(i.Board_Init) - i.ICC_Enable 0x00000234 Section 0 icc.o(i.ICC_Enable) - i.ICC_Ready 0x00000264 Section 0 icc.o(i.ICC_Ready) - ICC_Ready 0x00000265 Thumb Code 10 icc.o(i.ICC_Ready) - i.LP_SetOperatingVoltage 0x00000274 Section 0 lp.o(i.LP_SetOperatingVoltage) - i.PreInit 0x00000364 Section 0 system_max32660.o(i.PreInit) - i.SYS_ClockDisable 0x00000368 Section 0 mxc_sys.o(i.SYS_ClockDisable) - i.SYS_Clock_Select 0x00000394 Section 0 mxc_sys.o(i.SYS_Clock_Select) - i.SYS_Clock_Timeout 0x000005c8 Section 0 mxc_sys.o(i.SYS_Clock_Timeout) - SYS_Clock_Timeout 0x000005c9 Thumb Code 46 mxc_sys.o(i.SYS_Clock_Timeout) - i.SysTick_Handler 0x000005f6 Section 0 mxc_delay.o(i.SysTick_Handler) - i.SystemCoreClockSet 0x00000600 Section 0 system_func.o(i.SystemCoreClockSet) - i.SystemCoreClockUpdate 0x00000650 Section 0 system_max32660.o(i.SystemCoreClockUpdate) - i.SystemInit 0x000006b4 Section 0 system_max32660.o(i.SystemInit) - i.__scatterload_copy 0x00000748 Section 14 handlers.o(i.__scatterload_copy) - i.__scatterload_null 0x00000756 Section 2 handlers.o(i.__scatterload_null) - i.__scatterload_zeroinit 0x00000758 Section 14 handlers.o(i.__scatterload_zeroinit) - i.main 0x00000766 Section 0 main.o(i.main) - i.mxc_delay_check 0x00000778 Section 0 mxc_delay.o(i.mxc_delay_check) - i.mxc_delay_handler 0x000007cc Section 0 mxc_delay.o(i.mxc_delay_handler) - i.mxc_delay_init 0x00000824 Section 0 mxc_delay.o(i.mxc_delay_init) - mxc_delay_init 0x00000825 Thumb Code 154 mxc_delay.o(i.mxc_delay_init) - i.mxc_delay_start 0x000008d8 Section 0 mxc_delay.o(i.mxc_delay_start) - i.mxc_delay_stop 0x00000924 Section 0 mxc_delay.o(i.mxc_delay_stop) - .data 0x20000000 Section 1 system_func.o(.data) - usTickCountDiv 0x20000000 Data 1 system_func.o(.data) - .data 0x20000004 Section 4 system_max32660.o(.data) - .data 0x20000008 Section 28 mxc_delay.o(.data) - ctrl_save 0x20000008 Data 4 mxc_delay.o(.data) - compare_value 0x20000010 Data 8 mxc_delay.o(.data) - curr_value 0x20000018 Data 8 mxc_delay.o(.data) - reload 0x20000020 Data 4 mxc_delay.o(.data) - STACK 0x20000028 Section 8192 startup_max32660.o(STACK) + .text 0x000001be Section 0 memcpya.o(.text) + .text 0x000001e2 Section 0 memseta.o(.text) + .text 0x00000208 Section 36 init.o(.text) + .text 0x0000022c Section 0 uidiv.o(.text) + .text 0x00000258 Section 0 llshl.o(.text) + .text 0x00000276 Section 0 llushr.o(.text) + i.$Sub$$__main_after_scatterload 0x00000296 Section 0 system_max32660.o(i.$Sub$$__main_after_scatterload) + i.App_Gpio_I2C_Delay 0x000002a4 Section 0 app_gpio_i2c.o(i.App_Gpio_I2C_Delay) + App_Gpio_I2C_Delay 0x000002a5 Thumb Code 18 app_gpio_i2c.o(i.App_Gpio_I2C_Delay) + i.App_Gpio_I2C_Initialization 0x000002bc Section 0 app_gpio_i2c.o(i.App_Gpio_I2C_Initialization) + i.App_Gpio_I2C_Port_H 0x00000308 Section 0 app_gpio_i2c.o(i.App_Gpio_I2C_Port_H) + App_Gpio_I2C_Port_H 0x00000309 Thumb Code 14 app_gpio_i2c.o(i.App_Gpio_I2C_Port_H) + i.App_Gpio_I2C_Port_Input 0x0000031c Section 0 app_gpio_i2c.o(i.App_Gpio_I2C_Port_Input) + App_Gpio_I2C_Port_Input 0x0000031d Thumb Code 28 app_gpio_i2c.o(i.App_Gpio_I2C_Port_Input) + i.App_Gpio_I2C_Port_L 0x00000338 Section 0 app_gpio_i2c.o(i.App_Gpio_I2C_Port_L) + App_Gpio_I2C_Port_L 0x00000339 Thumb Code 14 app_gpio_i2c.o(i.App_Gpio_I2C_Port_L) + i.App_Gpio_I2C_Port_Output 0x0000034c Section 0 app_gpio_i2c.o(i.App_Gpio_I2C_Port_Output) + App_Gpio_I2C_Port_Output 0x0000034d Thumb Code 30 app_gpio_i2c.o(i.App_Gpio_I2C_Port_Output) + i.App_Gpio_I2C_Port_Read 0x0000036c Section 0 app_gpio_i2c.o(i.App_Gpio_I2C_Port_Read) + App_Gpio_I2C_Port_Read 0x0000036d Thumb Code 26 app_gpio_i2c.o(i.App_Gpio_I2C_Port_Read) + i.App_Gpio_I2C_Start 0x0000038c Section 0 app_gpio_i2c.o(i.App_Gpio_I2C_Start) + i.App_Gpio_I2C_Stop 0x000003c8 Section 0 app_gpio_i2c.o(i.App_Gpio_I2C_Stop) + i.App_Gpio_I2C_WriteData 0x00000406 Section 0 app_gpio_i2c.o(i.App_Gpio_I2C_WriteData) + i.App_Led_Initialization 0x00000498 Section 0 app_gpio_led.o(i.App_Led_Initialization) + i.App_Led_Off 0x000004f4 Section 0 app_gpio_led.o(i.App_Led_Off) + App_Led_Off 0x000004f5 Thumb Code 30 app_gpio_led.o(i.App_Led_Off) + i.App_Led_On 0x0000051c Section 0 app_gpio_led.o(i.App_Led_On) + App_Led_On 0x0000051d Thumb Code 30 app_gpio_led.o(i.App_Led_On) + i.App_Led_OutputSet 0x00000544 Section 0 app_gpio_led.o(i.App_Led_OutputSet) + i.App_Led_Output_Process 0x00000588 Section 0 app_gpio_led.o(i.App_Led_Output_Process) + App_Led_Output_Process 0x00000589 Thumb Code 124 app_gpio_led.o(i.App_Led_Output_Process) + i.App_Uart_Data_Transmit_Check 0x00000608 Section 0 app_uart.o(i.App_Uart_Data_Transmit_Check) + App_Uart_Data_Transmit_Check 0x00000609 Thumb Code 46 app_uart.o(i.App_Uart_Data_Transmit_Check) + i.App_Uart_Initialization 0x00000640 Section 0 app_uart.o(i.App_Uart_Initialization) + i.App_Uart_Interrupt_Handler 0x0000072c Section 0 app_uart.o(i.App_Uart_Interrupt_Handler) + App_Uart_Interrupt_Handler 0x0000072d Thumb Code 10 app_uart.o(i.App_Uart_Interrupt_Handler) + i.App_Uart_Read_Callback 0x0000073c Section 0 app_uart.o(i.App_Uart_Read_Callback) + App_Uart_Read_Callback 0x0000073d Thumb Code 32 app_uart.o(i.App_Uart_Read_Callback) + i.App_Uart_Read_Callback_Initialization 0x00000768 Section 0 app_uart.o(i.App_Uart_Read_Callback_Initialization) + App_Uart_Read_Callback_Initialization 0x00000769 Thumb Code 24 app_uart.o(i.App_Uart_Read_Callback_Initialization) + i.Board_Init 0x00000790 Section 0 system_max32660.o(i.Board_Init) + i.GPIO_Config 0x00000794 Section 0 gpio.o(i.GPIO_Config) + i.ICC_Enable 0x0000088c Section 0 icc.o(i.ICC_Enable) + i.ICC_Ready 0x000008bc Section 0 icc.o(i.ICC_Ready) + ICC_Ready 0x000008bd Thumb Code 10 icc.o(i.ICC_Ready) + i.LP_SetOperatingVoltage 0x000008cc Section 0 lp.o(i.LP_SetOperatingVoltage) + i.NVIC_ClearPendingIRQ 0x000009bc Section 0 app_uart.o(i.NVIC_ClearPendingIRQ) + NVIC_ClearPendingIRQ 0x000009bd Thumb Code 18 app_uart.o(i.NVIC_ClearPendingIRQ) + i.NVIC_DisableIRQ 0x000009d4 Section 0 app_uart.o(i.NVIC_DisableIRQ) + NVIC_DisableIRQ 0x000009d5 Thumb Code 18 app_uart.o(i.NVIC_DisableIRQ) + i.NVIC_EnableIRQ 0x000009ec Section 0 system_func.o(i.NVIC_EnableIRQ) + NVIC_EnableIRQ 0x000009ed Thumb Code 22 system_func.o(i.NVIC_EnableIRQ) + i.NVIC_EnableIRQ 0x00000a02 Section 0 app_uart.o(i.NVIC_EnableIRQ) + NVIC_EnableIRQ 0x00000a03 Thumb Code 22 app_uart.o(i.NVIC_EnableIRQ) + i.NVIC_SetRAM 0x00000a18 Section 0 nvic_table.o(i.NVIC_SetRAM) + i.NVIC_SetVector 0x00000a3c Section 0 nvic_table.o(i.NVIC_SetVector) + i.PreInit 0x00000a7c Section 0 system_max32660.o(i.PreInit) + i.RingBuffer_Dequeue 0x00000a80 Section 0 app_ring_buffer.o(i.RingBuffer_Dequeue) + i.RingBuffer_Enqueue 0x00000ac0 Section 0 app_ring_buffer.o(i.RingBuffer_Enqueue) + i.RingBuffer_GetData 0x00000b02 Section 0 app_ring_buffer.o(i.RingBuffer_GetData) + i.RingBuffer_Get_DataSize 0x00000b10 Section 0 app_ring_buffer.o(i.RingBuffer_Get_DataSize) + i.RingBuffer_Initialization 0x00000b40 Section 0 app_ring_buffer.o(i.RingBuffer_Initialization) + i.RingBuffer_PopData 0x00000b60 Section 0 app_ring_buffer.o(i.RingBuffer_PopData) + i.RingBuffer_isEmpty 0x00000b88 Section 0 app_ring_buffer.o(i.RingBuffer_isEmpty) + i.RingBuffer_isFull 0x00000b98 Section 0 app_ring_buffer.o(i.RingBuffer_isFull) + i.SSD1306_ClearScreen 0x00000bbc Section 0 ssd1306.o(i.SSD1306_ClearScreen) + i.SSD1306_DrawChar 0x00000bd0 Section 0 ssd1306.o(i.SSD1306_DrawChar) + i.SSD1306_DrawLine 0x00000c24 Section 0 ssd1306.o(i.SSD1306_DrawLine) + i.SSD1306_DrawPixel 0x00000ce8 Section 0 ssd1306.o(i.SSD1306_DrawPixel) + i.SSD1306_DrawString 0x00000d30 Section 0 ssd1306.o(i.SSD1306_DrawString) + i.SSD1306_Init 0x00000d4c Section 0 ssd1306.o(i.SSD1306_Init) + i.SSD1306_InverseScreen 0x00000dbc Section 0 ssd1306.o(i.SSD1306_InverseScreen) + i.SSD1306_NormalScreen 0x00000dee Section 0 ssd1306.o(i.SSD1306_NormalScreen) + i.SSD1306_Send_Command 0x00000e20 Section 0 ssd1306.o(i.SSD1306_Send_Command) + i.SSD1306_Send_StartAndSLAW 0x00000e4e Section 0 ssd1306.o(i.SSD1306_Send_StartAndSLAW) + i.SSD1306_SetPosition 0x00000e7c Section 0 ssd1306.o(i.SSD1306_SetPosition) + i.SSD1306_UpdatePosition 0x00000e8c Section 0 ssd1306.o(i.SSD1306_UpdatePosition) + i.SSD1306_UpdateScreen 0x00000ec8 Section 0 ssd1306.o(i.SSD1306_UpdateScreen) + i.SW_Timer_Callback_Process 0x00000f24 Section 0 sw_timer.o(i.SW_Timer_Callback_Process) + i.SW_Timer_Callback_Register 0x00000fb0 Section 0 sw_timer.o(i.SW_Timer_Callback_Register) + i.SYS_ClockDisable 0x0000100c Section 0 mxc_sys.o(i.SYS_ClockDisable) + i.SYS_ClockEnable 0x00001036 Section 0 mxc_sys.o(i.SYS_ClockEnable) + i.SYS_Clock_Select 0x00001060 Section 0 mxc_sys.o(i.SYS_Clock_Select) + i.SYS_Clock_Timeout 0x00001294 Section 0 mxc_sys.o(i.SYS_Clock_Timeout) + SYS_Clock_Timeout 0x00001295 Thumb Code 46 mxc_sys.o(i.SYS_Clock_Timeout) + i.SYS_TMR_Init 0x000012c4 Section 0 mxc_sys.o(i.SYS_TMR_Init) + i.SYS_UART_Init 0x00001320 Section 0 mxc_sys.o(i.SYS_UART_Init) + i.SysTick_Handler 0x000013bc Section 0 mxc_delay.o(i.SysTick_Handler) + i.SystemCoreClockSet 0x000013c4 Section 0 system_func.o(i.SystemCoreClockSet) + i.SystemCoreClockUpdate 0x00001418 Section 0 system_max32660.o(i.SystemCoreClockUpdate) + i.SystemInit 0x0000147c Section 0 system_max32660.o(i.SystemInit) + i.SystemTimerInitialization 0x00001510 Section 0 system_func.o(i.SystemTimerInitialization) + SystemTimerInitialization 0x00001511 Thumb Code 124 system_func.o(i.SystemTimerInitialization) + i.SystemTimer_GetPeriodCount 0x00001598 Section 0 system_func.o(i.SystemTimer_GetPeriodCount) + SystemTimer_GetPeriodCount 0x00001599 Thumb Code 20 system_func.o(i.SystemTimer_GetPeriodCount) + i.SystemTimer_Get_TickCount 0x000015b0 Section 0 system_func.o(i.SystemTimer_Get_TickCount) + i.SystemTimer_Interrput_Handler 0x000015bc Section 0 system_func.o(i.SystemTimer_Interrput_Handler) + SystemTimer_Interrput_Handler 0x000015bd Thumb Code 20 system_func.o(i.SystemTimer_Interrput_Handler) + i.TMR_Config 0x000015d8 Section 0 tmr.o(i.TMR_Config) + i.TMR_Disable 0x00001602 Section 0 tmr.o(i.TMR_Disable) + i.TMR_Enable 0x0000160c Section 0 tmr.o(i.TMR_Enable) + i.TMR_Init 0x00001616 Section 0 tmr.o(i.TMR_Init) + i.TMR_IntClear 0x00001640 Section 0 tmr.o(i.TMR_IntClear) + i.TWI_MT_Send_Data 0x00001646 Section 0 ssd1306_i2c.o(i.TWI_MT_Send_Data) + i.TWI_MT_Send_SLAW 0x0000165c Section 0 ssd1306_i2c.o(i.TWI_MT_Send_SLAW) + i.TWI_MT_Start 0x00001674 Section 0 ssd1306_i2c.o(i.TWI_MT_Start) + i.TWI_Stop 0x0000167e Section 0 ssd1306_i2c.o(i.TWI_Stop) + i.Test_Process 0x00001688 Section 0 main.o(i.Test_Process) + i.UART_Busy 0x000016c8 Section 0 uart.o(i.UART_Busy) + i.UART_ClearFlags 0x00001720 Section 0 uart.o(i.UART_ClearFlags) + i.UART_Handler 0x00001724 Section 0 uart.o(i.UART_Handler) + i.UART_Init 0x0000178c Section 0 uart.o(i.UART_Init) + i.UART_NumReadAvail 0x00001868 Section 0 uart.o(i.UART_NumReadAvail) + i.UART_NumWriteAvail 0x00001872 Section 0 uart.o(i.UART_NumWriteAvail) + i.UART_ReadAsync 0x00001880 Section 0 uart.o(i.UART_ReadAsync) + i.UART_ReadHandler 0x00001924 Section 0 uart.o(i.UART_ReadHandler) + UART_ReadHandler 0x00001925 Thumb Code 202 uart.o(i.UART_ReadHandler) + i.UART_WriteByte 0x000019f4 Section 0 uart.o(i.UART_WriteByte) + i.UART_WriteHandler 0x00001a04 Section 0 uart.o(i.UART_WriteHandler) + UART_WriteHandler 0x00001a05 Thumb Code 130 uart.o(i.UART_WriteHandler) + i.__0printf$1 0x00001a8c Section 0 printf1.o(i.__0printf$1) + i.__0sprintf$1 0x00001aac Section 0 printf1.o(i.__0sprintf$1) + i.__scatterload_copy 0x00001ad4 Section 14 handlers.o(i.__scatterload_copy) + i.__scatterload_null 0x00001ae2 Section 2 handlers.o(i.__scatterload_null) + i.__scatterload_zeroinit 0x00001ae4 Section 14 handlers.o(i.__scatterload_zeroinit) + i._printf_core 0x00001af4 Section 0 printf1.o(i._printf_core) + _printf_core 0x00001af5 Thumb Code 336 printf1.o(i._printf_core) + i._sputc 0x00001c48 Section 0 printf1.o(i._sputc) + _sputc 0x00001c49 Thumb Code 10 printf1.o(i._sputc) + i.fputc 0x00001c54 Section 0 app_uart.o(i.fputc) + i.main 0x00001c6c Section 0 main.o(i.main) + i.mxc_delay 0x00001d50 Section 0 mxc_delay.o(i.mxc_delay) + i.mxc_delay_check 0x00001dd0 Section 0 mxc_delay.o(i.mxc_delay_check) + i.mxc_delay_handler 0x00001e24 Section 0 mxc_delay.o(i.mxc_delay_handler) + i.mxc_delay_init 0x00001e7c Section 0 mxc_delay.o(i.mxc_delay_init) + mxc_delay_init 0x00001e7d Thumb Code 154 mxc_delay.o(i.mxc_delay_init) + i.mxc_delay_start 0x00001f30 Section 0 mxc_delay.o(i.mxc_delay_start) + i.mxc_delay_stop 0x00001f7c Section 0 mxc_delay.o(i.mxc_delay_stop) + i.mxc_free_lock 0x00001f98 Section 0 mxc_lock.o(i.mxc_free_lock) + i.mxc_get_lock 0x00001fa2 Section 0 mxc_lock.o(i.mxc_get_lock) + .constdata 0x00001fc4 Section 192 mxc_pins.o(.constdata) + .constdata 0x00002084 Section 568 ssd1306.o(.constdata) + .data 0x20000000 Section 4 main.o(.data) + count 0x20000000 Data 4 main.o(.data) + .data 0x20000004 Section 8 system_func.o(.data) + usTickCountDiv 0x20000004 Data 1 system_func.o(.data) + msTickCount 0x20000008 Data 4 system_func.o(.data) + .data 0x2000000c Section 32 app_gpio_led.o(.data) + App_Led_Ctrl_Info 0x2000000c Data 32 app_gpio_led.o(.data) + .data 0x2000002c Section 4 app_gpio_i2c.o(.data) + DelayCount 0x2000002c Data 4 app_gpio_i2c.o(.data) + .data 0x20000030 Section 8 app_uart.o(.data) + RxData 0x20000030 Data 1 app_uart.o(.data) + UartError 0x20000034 Data 4 app_uart.o(.data) + .data 0x20000038 Section 4 system_max32660.o(.data) + .data 0x20000040 Section 28 mxc_delay.o(.data) + ctrl_save 0x20000040 Data 4 mxc_delay.o(.data) + compare_value 0x20000048 Data 8 mxc_delay.o(.data) + curr_value 0x20000050 Data 8 mxc_delay.o(.data) + reload 0x20000058 Data 4 mxc_delay.o(.data) + .data 0x2000005c Section 16 uart.o(.data) + rx_states 0x2000005c Data 8 uart.o(.data) + tx_states 0x20000064 Data 8 uart.o(.data) + .data 0x2000006c Section 4 ssd1306.o(.data) + .data 0x20000070 Section 4 stdout.o(.data) + .bss 0x20000074 Section 160 sw_timer.o(.bss) + SW_Timer_Info 0x20000074 Data 160 sw_timer.o(.bss) + .bss 0x20000114 Section 696 app_uart.o(.bss) + App_Uart_Read_Req 0x20000114 Data 16 app_uart.o(.bss) + TxBuffer 0x20000124 Data 512 app_uart.o(.bss) + RxBuffer 0x20000324 Data 128 app_uart.o(.bss) + Tx_RingBuffer 0x200003a4 Data 20 app_uart.o(.bss) + Rx_RingBuffer 0x200003b8 Data 20 app_uart.o(.bss) + .bss 0x20000400 Section 284 nvic_table.o(.bss) + ramVectorTable 0x20000400 Data 284 nvic_table.o(.bss) + .bss 0x2000051c Section 512 ssd1306.o(.bss) + cacheMemLcd 0x2000051c Data 512 ssd1306.o(.bss) + STACK 0x20000720 Section 8192 startup_max32660.o(STACK) Global Symbols Symbol Name Value Ov Type Size Object(Section) - BuildAttributes$$THM_ISAv4$E$P$D$K$B$S$7EM$VFPi3$EXTD16$VFPS$VFMA$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$EBA8$MICROLIB$REQ8$PRES8$EABIv2 0x00000000 Number 0 anon$$obj.o ABSOLUTE + BuildAttributes$$THM_ISAv4$E$P$D$K$B$S$7EM$VFPi3$EXTD16$VFPS$VFMA$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$ROPI$EBA8$MICROLIB$REQ8$PRES8$EABIv2 0x00000000 Number 0 anon$$obj.o ABSOLUTE __ARM_use_no_argv 0x00000000 Number 0 main.o ABSOLUTE __Vectors 0x00000000 Data 0 startup_max32660.o(RESET) __isr_vector 0x00000000 Data 4 startup_max32660.o(RESET) + _printf_a 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_c 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_charcount 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_d 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_e 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_f 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_flags 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_fp_dec 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_fp_hex 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_g 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_i 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_int_dec 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_l 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_lc 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_ll 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_lld 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_lli 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_llo 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_llu 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_llx 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_longlong_dec 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_longlong_hex 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_longlong_oct 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_ls 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_mbtowc 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_n 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_o 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_p 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_percent 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_pre_padding 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_return_value 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_s 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_sizespec 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_str 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_truncate_signed 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_truncate_unsigned 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_u 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_wc 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_wctomb 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_widthprec 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_x 0x00000000 Number 0 stubs.o ABSOLUTE __arm_fini_ - Undefined Weak Reference __cpp_initialize__aeabi_ - Undefined Weak Reference __cxa_finalize - Undefined Weak Reference @@ -932,35 +1563,133 @@ Image Symbol Table UART1_IRQHandler 0x00000153 Thumb Code 0 startup_max32660.o(.text) WDT0_IRQHandler 0x00000153 Thumb Code 0 startup_max32660.o(.text) __aeabi_uldivmod 0x0000015d Thumb Code 98 uldiv.o(.text) - __scatterload 0x000001c1 Thumb Code 28 init.o(.text) - __scatterload_rt2 0x000001c1 Thumb Code 0 init.o(.text) - __aeabi_llsl 0x000001e5 Thumb Code 30 llshl.o(.text) - _ll_shift_l 0x000001e5 Thumb Code 0 llshl.o(.text) - __aeabi_llsr 0x00000203 Thumb Code 32 llushr.o(.text) - _ll_ushift_r 0x00000203 Thumb Code 0 llushr.o(.text) - __main_after_scatterload 0x00000223 Thumb Code 12 system_max32660.o(i.$Sub$$__main_after_scatterload) - Board_Init 0x0000022f Thumb Code 4 system_max32660.o(i.Board_Init) - ICC_Enable 0x00000235 Thumb Code 34 icc.o(i.ICC_Enable) - LP_SetOperatingVoltage 0x00000275 Thumb Code 232 lp.o(i.LP_SetOperatingVoltage) - PreInit 0x00000365 Thumb Code 4 system_max32660.o(i.PreInit) - SYS_ClockDisable 0x00000369 Thumb Code 42 mxc_sys.o(i.SYS_ClockDisable) - SYS_Clock_Select 0x00000395 Thumb Code 556 mxc_sys.o(i.SYS_Clock_Select) - SysTick_Handler 0x000005f7 Thumb Code 8 mxc_delay.o(i.SysTick_Handler) - SystemCoreClockSet 0x00000601 Thumb Code 76 system_func.o(i.SystemCoreClockSet) - SystemCoreClockUpdate 0x00000651 Thumb Code 80 system_max32660.o(i.SystemCoreClockUpdate) - SystemInit 0x000006b5 Thumb Code 132 system_max32660.o(i.SystemInit) - __scatterload_copy 0x00000749 Thumb Code 14 handlers.o(i.__scatterload_copy) - __scatterload_null 0x00000757 Thumb Code 2 handlers.o(i.__scatterload_null) - __scatterload_zeroinit 0x00000759 Thumb Code 14 handlers.o(i.__scatterload_zeroinit) - main 0x00000767 Thumb Code 16 main.o(i.main) - mxc_delay_check 0x00000779 Thumb Code 72 mxc_delay.o(i.mxc_delay_check) - mxc_delay_handler 0x000007cd Thumb Code 76 mxc_delay.o(i.mxc_delay_handler) - mxc_delay_start 0x000008d9 Thumb Code 72 mxc_delay.o(i.mxc_delay_start) - mxc_delay_stop 0x00000925 Thumb Code 20 mxc_delay.o(i.mxc_delay_stop) - Region$$Table$$Base 0x00000940 Number 0 anon$$obj.o(Region$$Table) - Region$$Table$$Limit 0x00000960 Number 0 anon$$obj.o(Region$$Table) - SystemCoreClock 0x20000004 Data 4 system_max32660.o(.data) - __initial_sp 0x20002028 Data 0 startup_max32660.o(STACK) + __aeabi_memcpy 0x000001bf Thumb Code 36 memcpya.o(.text) + __aeabi_memcpy4 0x000001bf Thumb Code 0 memcpya.o(.text) + __aeabi_memcpy8 0x000001bf Thumb Code 0 memcpya.o(.text) + __aeabi_memset 0x000001e3 Thumb Code 14 memseta.o(.text) + __aeabi_memset4 0x000001e3 Thumb Code 0 memseta.o(.text) + __aeabi_memset8 0x000001e3 Thumb Code 0 memseta.o(.text) + __aeabi_memclr 0x000001f1 Thumb Code 4 memseta.o(.text) + __aeabi_memclr4 0x000001f1 Thumb Code 0 memseta.o(.text) + __aeabi_memclr8 0x000001f1 Thumb Code 0 memseta.o(.text) + _memset$wrapper 0x000001f5 Thumb Code 18 memseta.o(.text) + __scatterload 0x00000209 Thumb Code 28 init.o(.text) + __scatterload_rt2 0x00000209 Thumb Code 0 init.o(.text) + __aeabi_uidiv 0x0000022d Thumb Code 0 uidiv.o(.text) + __aeabi_uidivmod 0x0000022d Thumb Code 44 uidiv.o(.text) + __aeabi_llsl 0x00000259 Thumb Code 30 llshl.o(.text) + _ll_shift_l 0x00000259 Thumb Code 0 llshl.o(.text) + __aeabi_llsr 0x00000277 Thumb Code 32 llushr.o(.text) + _ll_ushift_r 0x00000277 Thumb Code 0 llushr.o(.text) + __main_after_scatterload 0x00000297 Thumb Code 12 system_max32660.o(i.$Sub$$__main_after_scatterload) + App_Gpio_I2C_Initialization 0x000002bd Thumb Code 68 app_gpio_i2c.o(i.App_Gpio_I2C_Initialization) + App_Gpio_I2C_Start 0x0000038d Thumb Code 60 app_gpio_i2c.o(i.App_Gpio_I2C_Start) + App_Gpio_I2C_Stop 0x000003c9 Thumb Code 62 app_gpio_i2c.o(i.App_Gpio_I2C_Stop) + App_Gpio_I2C_WriteData 0x00000407 Thumb Code 144 app_gpio_i2c.o(i.App_Gpio_I2C_WriteData) + App_Led_Initialization 0x00000499 Thumb Code 82 app_gpio_led.o(i.App_Led_Initialization) + App_Led_OutputSet 0x00000545 Thumb Code 62 app_gpio_led.o(i.App_Led_OutputSet) + App_Uart_Initialization 0x00000641 Thumb Code 198 app_uart.o(i.App_Uart_Initialization) + Board_Init 0x00000791 Thumb Code 4 system_max32660.o(i.Board_Init) + GPIO_Config 0x00000795 Thumb Code 242 gpio.o(i.GPIO_Config) + ICC_Enable 0x0000088d Thumb Code 34 icc.o(i.ICC_Enable) + LP_SetOperatingVoltage 0x000008cd Thumb Code 232 lp.o(i.LP_SetOperatingVoltage) + NVIC_SetRAM 0x00000a19 Thumb Code 22 nvic_table.o(i.NVIC_SetRAM) + NVIC_SetVector 0x00000a3d Thumb Code 56 nvic_table.o(i.NVIC_SetVector) + PreInit 0x00000a7d Thumb Code 4 system_max32660.o(i.PreInit) + RingBuffer_Dequeue 0x00000a81 Thumb Code 64 app_ring_buffer.o(i.RingBuffer_Dequeue) + RingBuffer_Enqueue 0x00000ac1 Thumb Code 66 app_ring_buffer.o(i.RingBuffer_Enqueue) + RingBuffer_GetData 0x00000b03 Thumb Code 14 app_ring_buffer.o(i.RingBuffer_GetData) + RingBuffer_Get_DataSize 0x00000b11 Thumb Code 48 app_ring_buffer.o(i.RingBuffer_Get_DataSize) + RingBuffer_Initialization 0x00000b41 Thumb Code 32 app_ring_buffer.o(i.RingBuffer_Initialization) + RingBuffer_PopData 0x00000b61 Thumb Code 40 app_ring_buffer.o(i.RingBuffer_PopData) + RingBuffer_isEmpty 0x00000b89 Thumb Code 16 app_ring_buffer.o(i.RingBuffer_isEmpty) + RingBuffer_isFull 0x00000b99 Thumb Code 34 app_ring_buffer.o(i.RingBuffer_isFull) + SSD1306_ClearScreen 0x00000bbd Thumb Code 14 ssd1306.o(i.SSD1306_ClearScreen) + SSD1306_DrawChar 0x00000bd1 Thumb Code 72 ssd1306.o(i.SSD1306_DrawChar) + SSD1306_DrawLine 0x00000c25 Thumb Code 196 ssd1306.o(i.SSD1306_DrawLine) + SSD1306_DrawPixel 0x00000ce9 Thumb Code 64 ssd1306.o(i.SSD1306_DrawPixel) + SSD1306_DrawString 0x00000d31 Thumb Code 26 ssd1306.o(i.SSD1306_DrawString) + SSD1306_Init 0x00000d4d Thumb Code 106 ssd1306.o(i.SSD1306_Init) + SSD1306_InverseScreen 0x00000dbd Thumb Code 50 ssd1306.o(i.SSD1306_InverseScreen) + SSD1306_NormalScreen 0x00000def Thumb Code 50 ssd1306.o(i.SSD1306_NormalScreen) + SSD1306_Send_Command 0x00000e21 Thumb Code 46 ssd1306.o(i.SSD1306_Send_Command) + SSD1306_Send_StartAndSLAW 0x00000e4f Thumb Code 44 ssd1306.o(i.SSD1306_Send_StartAndSLAW) + SSD1306_SetPosition 0x00000e7d Thumb Code 10 ssd1306.o(i.SSD1306_SetPosition) + SSD1306_UpdatePosition 0x00000e8d Thumb Code 56 ssd1306.o(i.SSD1306_UpdatePosition) + SSD1306_UpdateScreen 0x00000ec9 Thumb Code 86 ssd1306.o(i.SSD1306_UpdateScreen) + SW_Timer_Callback_Process 0x00000f25 Thumb Code 136 sw_timer.o(i.SW_Timer_Callback_Process) + SW_Timer_Callback_Register 0x00000fb1 Thumb Code 86 sw_timer.o(i.SW_Timer_Callback_Register) + SYS_ClockDisable 0x0000100d Thumb Code 42 mxc_sys.o(i.SYS_ClockDisable) + SYS_ClockEnable 0x00001037 Thumb Code 42 mxc_sys.o(i.SYS_ClockEnable) + SYS_Clock_Select 0x00001061 Thumb Code 556 mxc_sys.o(i.SYS_Clock_Select) + SYS_TMR_Init 0x000012c5 Thumb Code 74 mxc_sys.o(i.SYS_TMR_Init) + SYS_UART_Init 0x00001321 Thumb Code 122 mxc_sys.o(i.SYS_UART_Init) + SysTick_Handler 0x000013bd Thumb Code 8 mxc_delay.o(i.SysTick_Handler) + SystemCoreClockSet 0x000013c5 Thumb Code 80 system_func.o(i.SystemCoreClockSet) + SystemCoreClockUpdate 0x00001419 Thumb Code 80 system_max32660.o(i.SystemCoreClockUpdate) + SystemInit 0x0000147d Thumb Code 132 system_max32660.o(i.SystemInit) + SystemTimer_Get_TickCount 0x000015b1 Thumb Code 6 system_func.o(i.SystemTimer_Get_TickCount) + TMR_Config 0x000015d9 Thumb Code 42 tmr.o(i.TMR_Config) + TMR_Disable 0x00001603 Thumb Code 10 tmr.o(i.TMR_Disable) + TMR_Enable 0x0000160d Thumb Code 10 tmr.o(i.TMR_Enable) + TMR_Init 0x00001617 Thumb Code 42 tmr.o(i.TMR_Init) + TMR_IntClear 0x00001641 Thumb Code 6 tmr.o(i.TMR_IntClear) + TWI_MT_Send_Data 0x00001647 Thumb Code 22 ssd1306_i2c.o(i.TWI_MT_Send_Data) + TWI_MT_Send_SLAW 0x0000165d Thumb Code 24 ssd1306_i2c.o(i.TWI_MT_Send_SLAW) + TWI_MT_Start 0x00001675 Thumb Code 10 ssd1306_i2c.o(i.TWI_MT_Start) + TWI_Stop 0x0000167f Thumb Code 8 ssd1306_i2c.o(i.TWI_Stop) + Test_Process 0x00001689 Thumb Code 48 main.o(i.Test_Process) + UART_Busy 0x000016c9 Thumb Code 76 uart.o(i.UART_Busy) + UART_ClearFlags 0x00001721 Thumb Code 4 uart.o(i.UART_ClearFlags) + UART_Handler 0x00001725 Thumb Code 86 uart.o(i.UART_Handler) + UART_Init 0x0000178d Thumb Code 198 uart.o(i.UART_Init) + UART_NumReadAvail 0x00001869 Thumb Code 10 uart.o(i.UART_NumReadAvail) + UART_NumWriteAvail 0x00001873 Thumb Code 14 uart.o(i.UART_NumWriteAvail) + UART_ReadAsync 0x00001881 Thumb Code 150 uart.o(i.UART_ReadAsync) + UART_WriteByte 0x000019f5 Thumb Code 16 uart.o(i.UART_WriteByte) + __0printf$1 0x00001a8d Thumb Code 22 printf1.o(i.__0printf$1) + __1printf$1 0x00001a8d Thumb Code 0 printf1.o(i.__0printf$1) + __2printf 0x00001a8d Thumb Code 0 printf1.o(i.__0printf$1) + __0sprintf$1 0x00001aad Thumb Code 34 printf1.o(i.__0sprintf$1) + __1sprintf$1 0x00001aad Thumb Code 0 printf1.o(i.__0sprintf$1) + __2sprintf 0x00001aad Thumb Code 0 printf1.o(i.__0sprintf$1) + __scatterload_copy 0x00001ad5 Thumb Code 14 handlers.o(i.__scatterload_copy) + __scatterload_null 0x00001ae3 Thumb Code 2 handlers.o(i.__scatterload_null) + __scatterload_zeroinit 0x00001ae5 Thumb Code 14 handlers.o(i.__scatterload_zeroinit) + fputc 0x00001c55 Thumb Code 18 app_uart.o(i.fputc) + main 0x00001c6d Thumb Code 164 main.o(i.main) + mxc_delay 0x00001d51 Thumb Code 116 mxc_delay.o(i.mxc_delay) + mxc_delay_check 0x00001dd1 Thumb Code 72 mxc_delay.o(i.mxc_delay_check) + mxc_delay_handler 0x00001e25 Thumb Code 76 mxc_delay.o(i.mxc_delay_handler) + mxc_delay_start 0x00001f31 Thumb Code 72 mxc_delay.o(i.mxc_delay_start) + mxc_delay_stop 0x00001f7d Thumb Code 20 mxc_delay.o(i.mxc_delay_stop) + mxc_free_lock 0x00001f99 Thumb Code 10 mxc_lock.o(i.mxc_free_lock) + mxc_get_lock 0x00001fa3 Thumb Code 32 mxc_lock.o(i.mxc_get_lock) + gpio_cfg_tmr0 0x00001fc4 Data 12 mxc_pins.o(.constdata) + gpio_cfg_uart0rtscts 0x00001fd0 Data 12 mxc_pins.o(.constdata) + gpio_cfg_uart0a 0x00001fdc Data 12 mxc_pins.o(.constdata) + gpio_cfg_uart1rtscts 0x00001fe8 Data 12 mxc_pins.o(.constdata) + gpio_cfg_uart1a 0x00001ff4 Data 12 mxc_pins.o(.constdata) + gpio_cfg_uart1b 0x00002000 Data 12 mxc_pins.o(.constdata) + gpio_cfg_uart1c 0x0000200c Data 12 mxc_pins.o(.constdata) + gpio_cfg_i2c0 0x00002018 Data 12 mxc_pins.o(.constdata) + gpio_cfg_i2c1 0x00002024 Data 12 mxc_pins.o(.constdata) + gpio_cfg_spi17y 0x00002030 Data 12 mxc_pins.o(.constdata) + gpio_cfg_spimss1a 0x0000203c Data 12 mxc_pins.o(.constdata) + gpio_cfg_spimss1b 0x00002048 Data 12 mxc_pins.o(.constdata) + gpio_cfg_i2s1a 0x00002054 Data 12 mxc_pins.o(.constdata) + gpio_cfg_i2s1b 0x00002060 Data 12 mxc_pins.o(.constdata) + gpio_cfg_swd 0x0000206c Data 12 mxc_pins.o(.constdata) + gpio_cfg_rtc 0x00002078 Data 12 mxc_pins.o(.constdata) + FONTS 0x00002084 Data 480 ssd1306.o(.constdata) + INIT_SSD1306_ADAFRUIT 0x00002264 Data 44 ssd1306.o(.constdata) + INIT_SSD1306 0x00002290 Data 44 ssd1306.o(.constdata) + Region$$Table$$Base 0x000022bc Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x000022dc Number 0 anon$$obj.o(Region$$Table) + SystemCoreClock 0x20000038 Data 4 system_max32660.o(.data) + _counter 0x2000006c Data 4 ssd1306.o(.data) + __stdout 0x20000070 Data 4 stdout.o(.data) + __initial_sp 0x20002720 Data 0 startup_max32660.o(STACK) @@ -970,68 +1699,177 @@ Memory Map of the image Image Entry point : 0x0000011d - Load Region LR_IROM1 (Base: 0x00000000, Size: 0x00000984, Max: 0x00040000, ABSOLUTE) + Load Region LR_IROM1 (Base: 0x00000000, Size: 0x00002350, Max: 0x00040000, ABSOLUTE) - Execution Region ER_IROM1 (Exec base: 0x00000000, Load base: 0x00000000, Size: 0x00000960, Max: 0x00040000, ABSOLUTE) + Execution Region ER_IROM1 (Exec base: 0x00000000, Load base: 0x00000000, Size: 0x000022dc, Max: 0x00040000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object - 0x00000000 0x00000000 0x0000011c Data RO 280 RESET startup_max32660.o - 0x0000011c 0x0000011c 0x00000000 Code RO 2395 * .ARM.Collect$$$$00000000 mc_w.l(entry.o) - 0x0000011c 0x0000011c 0x00000004 Code RO 2407 .ARM.Collect$$$$00000001 mc_w.l(entry2.o) - 0x00000120 0x00000120 0x00000004 Code RO 2396 .ARM.Collect$$$$00000004 mc_w.l(entry5.o) - 0x00000124 0x00000124 0x00000000 Code RO 2411 .ARM.Collect$$$$00000008 mc_w.l(entry7b.o) - 0x00000124 0x00000124 0x00000000 Code RO 2413 .ARM.Collect$$$$0000000A mc_w.l(entry8b.o) - 0x00000124 0x00000124 0x00000008 Code RO 2414 .ARM.Collect$$$$0000000B mc_w.l(entry9a.o) - 0x0000012c 0x0000012c 0x00000004 Code RO 2421 .ARM.Collect$$$$0000000E mc_w.l(entry12b.o) - 0x00000130 0x00000130 0x00000000 Code RO 2416 .ARM.Collect$$$$0000000F mc_w.l(entry10a.o) - 0x00000130 0x00000130 0x00000000 Code RO 2418 .ARM.Collect$$$$00000011 mc_w.l(entry11a.o) - 0x00000130 0x00000130 0x00000004 Code RO 2408 .ARM.Collect$$$$00002712 mc_w.l(entry2.o) - 0x00000134 0x00000134 0x00000028 Code RO 281 .text startup_max32660.o - 0x0000015c 0x0000015c 0x00000062 Code RO 2399 .text mc_w.l(uldiv.o) - 0x000001be 0x000001be 0x00000002 PAD - 0x000001c0 0x000001c0 0x00000024 Code RO 2422 .text mc_w.l(init.o) - 0x000001e4 0x000001e4 0x0000001e Code RO 2424 .text mc_w.l(llshl.o) - 0x00000202 0x00000202 0x00000020 Code RO 2426 .text mc_w.l(llushr.o) - 0x00000222 0x00000222 0x0000000c Code RO 213 i.$Sub$$__main_after_scatterload system_max32660.o - 0x0000022e 0x0000022e 0x00000004 Code RO 214 i.Board_Init system_max32660.o - 0x00000232 0x00000232 0x00000002 PAD - 0x00000234 0x00000234 0x00000030 Code RO 781 i.ICC_Enable icc.o - 0x00000264 0x00000264 0x00000010 Code RO 784 i.ICC_Ready icc.o - 0x00000274 0x00000274 0x000000f0 Code RO 878 i.LP_SetOperatingVoltage lp.o - 0x00000364 0x00000364 0x00000004 Code RO 215 i.PreInit system_max32660.o - 0x00000368 0x00000368 0x0000002a Code RO 1284 i.SYS_ClockDisable mxc_sys.o - 0x00000392 0x00000392 0x00000002 PAD - 0x00000394 0x00000394 0x00000234 Code RO 1288 i.SYS_Clock_Select mxc_sys.o - 0x000005c8 0x000005c8 0x0000002e Code RO 1289 i.SYS_Clock_Timeout mxc_sys.o - 0x000005f6 0x000005f6 0x00000008 Code RO 1179 i.SysTick_Handler mxc_delay.o - 0x000005fe 0x000005fe 0x00000002 PAD - 0x00000600 0x00000600 0x00000050 Code RO 187 i.SystemCoreClockSet system_func.o - 0x00000650 0x00000650 0x00000064 Code RO 216 i.SystemCoreClockUpdate system_max32660.o - 0x000006b4 0x000006b4 0x00000094 Code RO 217 i.SystemInit system_max32660.o - 0x00000748 0x00000748 0x0000000e Code RO 2430 i.__scatterload_copy mc_w.l(handlers.o) - 0x00000756 0x00000756 0x00000002 Code RO 2431 i.__scatterload_null mc_w.l(handlers.o) - 0x00000758 0x00000758 0x0000000e Code RO 2432 i.__scatterload_zeroinit mc_w.l(handlers.o) - 0x00000766 0x00000766 0x00000010 Code RO 3 i.main main.o - 0x00000776 0x00000776 0x00000002 PAD - 0x00000778 0x00000778 0x00000054 Code RO 1181 i.mxc_delay_check mxc_delay.o - 0x000007cc 0x000007cc 0x00000058 Code RO 1182 i.mxc_delay_handler mxc_delay.o - 0x00000824 0x00000824 0x000000b4 Code RO 1183 i.mxc_delay_init mxc_delay.o - 0x000008d8 0x000008d8 0x0000004c Code RO 1184 i.mxc_delay_start mxc_delay.o - 0x00000924 0x00000924 0x0000001c Code RO 1185 i.mxc_delay_stop mxc_delay.o - 0x00000940 0x00000940 0x00000020 Data RO 2428 Region$$Table anon$$obj.o + 0x00000000 0x00000000 0x0000011c Data RO 768 RESET startup_max32660.o + 0x0000011c 0x0000011c 0x00000000 Code RO 3037 * .ARM.Collect$$$$00000000 mc_w.l(entry.o) + 0x0000011c 0x0000011c 0x00000004 Code RO 3310 .ARM.Collect$$$$00000001 mc_w.l(entry2.o) + 0x00000120 0x00000120 0x00000004 Code RO 3038 .ARM.Collect$$$$00000004 mc_w.l(entry5.o) + 0x00000124 0x00000124 0x00000000 Code RO 3314 .ARM.Collect$$$$00000008 mc_w.l(entry7b.o) + 0x00000124 0x00000124 0x00000000 Code RO 3316 .ARM.Collect$$$$0000000A mc_w.l(entry8b.o) + 0x00000124 0x00000124 0x00000008 Code RO 3317 .ARM.Collect$$$$0000000B mc_w.l(entry9a.o) + 0x0000012c 0x0000012c 0x00000004 Code RO 3324 .ARM.Collect$$$$0000000E mc_w.l(entry12b.o) + 0x00000130 0x00000130 0x00000000 Code RO 3319 .ARM.Collect$$$$0000000F mc_w.l(entry10a.o) + 0x00000130 0x00000130 0x00000000 Code RO 3321 .ARM.Collect$$$$00000011 mc_w.l(entry11a.o) + 0x00000130 0x00000130 0x00000004 Code RO 3311 .ARM.Collect$$$$00002712 mc_w.l(entry2.o) + 0x00000134 0x00000134 0x00000028 Code RO 769 .text startup_max32660.o + 0x0000015c 0x0000015c 0x00000062 Code RO 3041 .text mc_w.l(uldiv.o) + 0x000001be 0x000001be 0x00000024 Code RO 3043 .text mc_w.l(memcpya.o) + 0x000001e2 0x000001e2 0x00000024 Code RO 3045 .text mc_w.l(memseta.o) + 0x00000206 0x00000206 0x00000002 PAD + 0x00000208 0x00000208 0x00000024 Code RO 3325 .text mc_w.l(init.o) + 0x0000022c 0x0000022c 0x0000002c Code RO 3328 .text mc_w.l(uidiv.o) + 0x00000258 0x00000258 0x0000001e Code RO 3330 .text mc_w.l(llshl.o) + 0x00000276 0x00000276 0x00000020 Code RO 3332 .text mc_w.l(llushr.o) + 0x00000296 0x00000296 0x0000000c Code RO 701 i.$Sub$$__main_after_scatterload system_max32660.o + 0x000002a2 0x000002a2 0x00000002 PAD + 0x000002a4 0x000002a4 0x00000018 Code RO 426 i.App_Gpio_I2C_Delay app_gpio_i2c.o + 0x000002bc 0x000002bc 0x0000004c Code RO 427 i.App_Gpio_I2C_Initialization app_gpio_i2c.o + 0x00000308 0x00000308 0x00000014 Code RO 428 i.App_Gpio_I2C_Port_H app_gpio_i2c.o + 0x0000031c 0x0000031c 0x0000001c Code RO 429 i.App_Gpio_I2C_Port_Input app_gpio_i2c.o + 0x00000338 0x00000338 0x00000014 Code RO 430 i.App_Gpio_I2C_Port_L app_gpio_i2c.o + 0x0000034c 0x0000034c 0x0000001e Code RO 431 i.App_Gpio_I2C_Port_Output app_gpio_i2c.o + 0x0000036a 0x0000036a 0x00000002 PAD + 0x0000036c 0x0000036c 0x00000020 Code RO 432 i.App_Gpio_I2C_Port_Read app_gpio_i2c.o + 0x0000038c 0x0000038c 0x0000003c Code RO 435 i.App_Gpio_I2C_Start app_gpio_i2c.o + 0x000003c8 0x000003c8 0x0000003e Code RO 436 i.App_Gpio_I2C_Stop app_gpio_i2c.o + 0x00000406 0x00000406 0x00000090 Code RO 438 i.App_Gpio_I2C_WriteData app_gpio_i2c.o + 0x00000496 0x00000496 0x00000002 PAD + 0x00000498 0x00000498 0x0000005c Code RO 379 i.App_Led_Initialization app_gpio_led.o + 0x000004f4 0x000004f4 0x00000028 Code RO 380 i.App_Led_Off app_gpio_led.o + 0x0000051c 0x0000051c 0x00000028 Code RO 381 i.App_Led_On app_gpio_led.o + 0x00000544 0x00000544 0x00000044 Code RO 382 i.App_Led_OutputSet app_gpio_led.o + 0x00000588 0x00000588 0x00000080 Code RO 383 i.App_Led_Output_Process app_gpio_led.o + 0x00000608 0x00000608 0x00000038 Code RO 602 i.App_Uart_Data_Transmit_Check app_uart.o + 0x00000640 0x00000640 0x000000ec Code RO 605 i.App_Uart_Initialization app_uart.o + 0x0000072c 0x0000072c 0x00000010 Code RO 606 i.App_Uart_Interrupt_Handler app_uart.o + 0x0000073c 0x0000073c 0x0000002c Code RO 607 i.App_Uart_Read_Callback app_uart.o + 0x00000768 0x00000768 0x00000028 Code RO 608 i.App_Uart_Read_Callback_Initialization app_uart.o + 0x00000790 0x00000790 0x00000004 Code RO 702 i.Board_Init system_max32660.o + 0x00000794 0x00000794 0x000000f8 Code RO 953 i.GPIO_Config gpio.o + 0x0000088c 0x0000088c 0x00000030 Code RO 1269 i.ICC_Enable icc.o + 0x000008bc 0x000008bc 0x00000010 Code RO 1272 i.ICC_Ready icc.o + 0x000008cc 0x000008cc 0x000000f0 Code RO 1366 i.LP_SetOperatingVoltage lp.o + 0x000009bc 0x000009bc 0x00000018 Code RO 610 i.NVIC_ClearPendingIRQ app_uart.o + 0x000009d4 0x000009d4 0x00000018 Code RO 611 i.NVIC_DisableIRQ app_uart.o + 0x000009ec 0x000009ec 0x00000016 Code RO 213 i.NVIC_EnableIRQ system_func.o + 0x00000a02 0x00000a02 0x00000016 Code RO 612 i.NVIC_EnableIRQ app_uart.o + 0x00000a18 0x00000a18 0x00000024 Code RO 2020 i.NVIC_SetRAM nvic_table.o + 0x00000a3c 0x00000a3c 0x00000040 Code RO 2021 i.NVIC_SetVector nvic_table.o + 0x00000a7c 0x00000a7c 0x00000004 Code RO 703 i.PreInit system_max32660.o + 0x00000a80 0x00000a80 0x00000040 Code RO 528 i.RingBuffer_Dequeue app_ring_buffer.o + 0x00000ac0 0x00000ac0 0x00000042 Code RO 529 i.RingBuffer_Enqueue app_ring_buffer.o + 0x00000b02 0x00000b02 0x0000000e Code RO 530 i.RingBuffer_GetData app_ring_buffer.o + 0x00000b10 0x00000b10 0x00000030 Code RO 531 i.RingBuffer_Get_DataSize app_ring_buffer.o + 0x00000b40 0x00000b40 0x00000020 Code RO 532 i.RingBuffer_Initialization app_ring_buffer.o + 0x00000b60 0x00000b60 0x00000028 Code RO 533 i.RingBuffer_PopData app_ring_buffer.o + 0x00000b88 0x00000b88 0x00000010 Code RO 534 i.RingBuffer_isEmpty app_ring_buffer.o + 0x00000b98 0x00000b98 0x00000022 Code RO 535 i.RingBuffer_isFull app_ring_buffer.o + 0x00000bba 0x00000bba 0x00000002 PAD + 0x00000bbc 0x00000bbc 0x00000014 Code RO 2878 i.SSD1306_ClearScreen ssd1306.o + 0x00000bd0 0x00000bd0 0x00000054 Code RO 2879 i.SSD1306_DrawChar ssd1306.o + 0x00000c24 0x00000c24 0x000000c4 Code RO 2880 i.SSD1306_DrawLine ssd1306.o + 0x00000ce8 0x00000ce8 0x00000048 Code RO 2881 i.SSD1306_DrawPixel ssd1306.o + 0x00000d30 0x00000d30 0x0000001a Code RO 2882 i.SSD1306_DrawString ssd1306.o + 0x00000d4a 0x00000d4a 0x00000002 PAD + 0x00000d4c 0x00000d4c 0x00000070 Code RO 2883 i.SSD1306_Init ssd1306.o + 0x00000dbc 0x00000dbc 0x00000032 Code RO 2884 i.SSD1306_InverseScreen ssd1306.o + 0x00000dee 0x00000dee 0x00000032 Code RO 2885 i.SSD1306_NormalScreen ssd1306.o + 0x00000e20 0x00000e20 0x0000002e Code RO 2886 i.SSD1306_Send_Command ssd1306.o + 0x00000e4e 0x00000e4e 0x0000002c Code RO 2887 i.SSD1306_Send_StartAndSLAW ssd1306.o + 0x00000e7a 0x00000e7a 0x00000002 PAD + 0x00000e7c 0x00000e7c 0x00000010 Code RO 2888 i.SSD1306_SetPosition ssd1306.o + 0x00000e8c 0x00000e8c 0x0000003c Code RO 2889 i.SSD1306_UpdatePosition ssd1306.o + 0x00000ec8 0x00000ec8 0x0000005c Code RO 2890 i.SSD1306_UpdateScreen ssd1306.o + 0x00000f24 0x00000f24 0x0000008c Code RO 269 i.SW_Timer_Callback_Process sw_timer.o + 0x00000fb0 0x00000fb0 0x0000005c Code RO 270 i.SW_Timer_Callback_Register sw_timer.o + 0x0000100c 0x0000100c 0x0000002a Code RO 1772 i.SYS_ClockDisable mxc_sys.o + 0x00001036 0x00001036 0x0000002a Code RO 1774 i.SYS_ClockEnable mxc_sys.o + 0x00001060 0x00001060 0x00000234 Code RO 1776 i.SYS_Clock_Select mxc_sys.o + 0x00001294 0x00001294 0x0000002e Code RO 1777 i.SYS_Clock_Timeout mxc_sys.o + 0x000012c2 0x000012c2 0x00000002 PAD + 0x000012c4 0x000012c4 0x0000005c Code RO 1802 i.SYS_TMR_Init mxc_sys.o + 0x00001320 0x00001320 0x0000009c Code RO 1804 i.SYS_UART_Init mxc_sys.o + 0x000013bc 0x000013bc 0x00000008 Code RO 1667 i.SysTick_Handler mxc_delay.o + 0x000013c4 0x000013c4 0x00000054 Code RO 214 i.SystemCoreClockSet system_func.o + 0x00001418 0x00001418 0x00000064 Code RO 704 i.SystemCoreClockUpdate system_max32660.o + 0x0000147c 0x0000147c 0x00000094 Code RO 705 i.SystemInit system_max32660.o + 0x00001510 0x00001510 0x00000088 Code RO 215 i.SystemTimerInitialization system_func.o + 0x00001598 0x00001598 0x00000018 Code RO 216 i.SystemTimer_GetPeriodCount system_func.o + 0x000015b0 0x000015b0 0x0000000c Code RO 217 i.SystemTimer_Get_TickCount system_func.o + 0x000015bc 0x000015bc 0x0000001c Code RO 218 i.SystemTimer_Interrput_Handler system_func.o + 0x000015d8 0x000015d8 0x0000002a Code RO 2458 i.TMR_Config tmr.o + 0x00001602 0x00001602 0x0000000a Code RO 2459 i.TMR_Disable tmr.o + 0x0000160c 0x0000160c 0x0000000a Code RO 2460 i.TMR_Enable tmr.o + 0x00001616 0x00001616 0x0000002a Code RO 2466 i.TMR_Init tmr.o + 0x00001640 0x00001640 0x00000006 Code RO 2467 i.TMR_IntClear tmr.o + 0x00001646 0x00001646 0x00000016 Code RO 2989 i.TWI_MT_Send_Data ssd1306_i2c.o + 0x0000165c 0x0000165c 0x00000018 Code RO 2990 i.TWI_MT_Send_SLAW ssd1306_i2c.o + 0x00001674 0x00001674 0x0000000a Code RO 2991 i.TWI_MT_Start ssd1306_i2c.o + 0x0000167e 0x0000167e 0x00000008 Code RO 2992 i.TWI_Stop ssd1306_i2c.o + 0x00001686 0x00001686 0x00000002 PAD + 0x00001688 0x00001688 0x00000040 Code RO 3 i.Test_Process main.o + 0x000016c8 0x000016c8 0x00000058 Code RO 2643 i.UART_Busy uart.o + 0x00001720 0x00001720 0x00000004 Code RO 2644 i.UART_ClearFlags uart.o + 0x00001724 0x00001724 0x00000068 Code RO 2650 i.UART_Handler uart.o + 0x0000178c 0x0000178c 0x000000dc Code RO 2651 i.UART_Init uart.o + 0x00001868 0x00001868 0x0000000a Code RO 2652 i.UART_NumReadAvail uart.o + 0x00001872 0x00001872 0x0000000e Code RO 2653 i.UART_NumWriteAvail uart.o + 0x00001880 0x00001880 0x000000a4 Code RO 2656 i.UART_ReadAsync uart.o + 0x00001924 0x00001924 0x000000d0 Code RO 2658 i.UART_ReadHandler uart.o + 0x000019f4 0x000019f4 0x00000010 Code RO 2662 i.UART_WriteByte uart.o + 0x00001a04 0x00001a04 0x00000088 Code RO 2663 i.UART_WriteHandler uart.o + 0x00001a8c 0x00001a8c 0x00000020 Code RO 3094 i.__0printf$1 mc_w.l(printf1.o) + 0x00001aac 0x00001aac 0x00000028 Code RO 3096 i.__0sprintf$1 mc_w.l(printf1.o) + 0x00001ad4 0x00001ad4 0x0000000e Code RO 3351 i.__scatterload_copy mc_w.l(handlers.o) + 0x00001ae2 0x00001ae2 0x00000002 Code RO 3352 i.__scatterload_null mc_w.l(handlers.o) + 0x00001ae4 0x00001ae4 0x0000000e Code RO 3353 i.__scatterload_zeroinit mc_w.l(handlers.o) + 0x00001af2 0x00001af2 0x00000002 PAD + 0x00001af4 0x00001af4 0x00000154 Code RO 3101 i._printf_core mc_w.l(printf1.o) + 0x00001c48 0x00001c48 0x0000000a Code RO 3103 i._sputc mc_w.l(printf1.o) + 0x00001c52 0x00001c52 0x00000002 PAD + 0x00001c54 0x00001c54 0x00000018 Code RO 613 i.fputc app_uart.o + 0x00001c6c 0x00001c6c 0x000000e4 Code RO 4 i.main main.o + 0x00001d50 0x00001d50 0x00000080 Code RO 1668 i.mxc_delay mxc_delay.o + 0x00001dd0 0x00001dd0 0x00000054 Code RO 1669 i.mxc_delay_check mxc_delay.o + 0x00001e24 0x00001e24 0x00000058 Code RO 1670 i.mxc_delay_handler mxc_delay.o + 0x00001e7c 0x00001e7c 0x000000b4 Code RO 1671 i.mxc_delay_init mxc_delay.o + 0x00001f30 0x00001f30 0x0000004c Code RO 1672 i.mxc_delay_start mxc_delay.o + 0x00001f7c 0x00001f7c 0x0000001c Code RO 1673 i.mxc_delay_stop mxc_delay.o + 0x00001f98 0x00001f98 0x0000000a Code RO 1724 i.mxc_free_lock mxc_lock.o + 0x00001fa2 0x00001fa2 0x00000020 Code RO 1725 i.mxc_get_lock mxc_lock.o + 0x00001fc2 0x00001fc2 0x00000002 PAD + 0x00001fc4 0x00001fc4 0x000000c0 Data RO 1750 .constdata mxc_pins.o + 0x00002084 0x00002084 0x00000238 Data RO 2892 .constdata ssd1306.o + 0x000022bc 0x000022bc 0x00000020 Data RO 3349 Region$$Table anon$$obj.o - Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x00000960, Size: 0x00002028, Max: 0x00018000, ABSOLUTE) + Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x000022dc, Size: 0x00002720, Max: 0x00018000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object - 0x20000000 0x00000960 0x00000001 Data RW 188 .data system_func.o - 0x20000001 0x00000961 0x00000003 PAD - 0x20000004 0x00000964 0x00000004 Data RW 218 .data system_max32660.o - 0x20000008 0x00000968 0x0000001c Data RW 1186 .data mxc_delay.o - 0x20000024 0x00000984 0x00000004 PAD - 0x20000028 - 0x00002000 Zero RW 278 STACK startup_max32660.o + 0x20000000 0x000022dc 0x00000004 Data RW 5 .data main.o + 0x20000004 0x000022e0 0x00000008 Data RW 219 .data system_func.o + 0x2000000c 0x000022e8 0x00000020 Data RW 384 .data app_gpio_led.o + 0x2000002c 0x00002308 0x00000004 Data RW 439 .data app_gpio_i2c.o + 0x20000030 0x0000230c 0x00000008 Data RW 616 .data app_uart.o + 0x20000038 0x00002314 0x00000004 Data RW 706 .data system_max32660.o + 0x2000003c 0x00002318 0x00000004 PAD + 0x20000040 0x0000231c 0x0000001c Data RW 1674 .data mxc_delay.o + 0x2000005c 0x00002338 0x00000010 Data RW 2666 .data uart.o + 0x2000006c 0x00002348 0x00000004 Data RW 2893 .data ssd1306.o + 0x20000070 0x0000234c 0x00000004 Data RW 3327 .data mc_w.l(stdout.o) + 0x20000074 - 0x000000a0 Zero RW 272 .bss sw_timer.o + 0x20000114 - 0x000002b8 Zero RW 615 .bss app_uart.o + 0x200003cc 0x00002350 0x00000034 PAD + 0x20000400 - 0x0000011c Zero RW 2022 .bss nvic_table.o + 0x2000051c - 0x00000200 Zero RW 2891 .bss ssd1306.o + 0x2000071c 0x00002350 0x00000004 PAD + 0x20000720 - 0x00002000 Zero RW 766 STACK startup_max32660.o ============================================================================== @@ -1041,19 +1879,32 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug Object Name + 496 32 0 4 0 7196 app_gpio_i2c.o + 368 40 0 32 0 3913 app_gpio_led.o + 314 0 0 0 0 6259 app_ring_buffer.o + 486 100 0 8 696 33833 app_uart.o + 248 12 0 0 0 1366 gpio.o 64 20 0 0 0 961 icc.o 240 8 0 0 0 689 lp.o - 16 0 0 0 0 115095 main.o - 464 62 0 28 0 4263 mxc_delay.o - 652 8 0 0 0 6998 mxc_sys.o + 292 80 0 4 0 142570 main.o + 592 74 0 28 0 4935 mxc_delay.o + 42 0 0 0 0 1675 mxc_lock.o + 0 0 192 0 0 1422 mxc_pins.o + 942 60 0 0 0 8975 mxc_sys.o + 100 22 0 0 284 2102 nvic_table.o + 868 48 568 4 512 10728 ssd1306.o + 64 0 0 0 0 2424 ssd1306_i2c.o 40 8 284 0 8192 812 startup_max32660.o - 80 4 0 1 0 1241 system_func.o + 232 10 0 0 160 3061 sw_timer.o + 306 34 0 8 0 30424 system_func.o 268 36 0 4 0 2987 system_max32660.o + 110 0 0 0 0 3366 tmr.o + 964 78 0 16 0 8552 uart.o ---------------------------------------------------------------------- - 1832 146 316 36 8196 133046 Object Totals + 7054 662 1076 112 9900 278250 Object Totals 0 0 32 0 0 0 (incl. Generated) - 8 0 0 3 4 0 (incl. Padding) + 18 0 0 4 56 0 (incl. Padding) ---------------------------------------------------------------------- @@ -1072,20 +1923,25 @@ Image component sizes 36 8 0 0 0 68 init.o 30 0 0 0 0 68 llshl.o 32 0 0 0 0 68 llushr.o + 36 0 0 0 0 68 memcpya.o + 36 0 0 0 0 108 memseta.o + 422 20 0 0 0 336 printf1.o + 0 0 0 4 0 0 stdout.o + 44 0 0 0 0 80 uidiv.o 98 0 0 0 0 92 uldiv.o ---------------------------------------------------------------------- - 252 16 0 0 0 296 Library Totals - 2 0 0 0 0 0 (incl. Padding) + 794 36 0 4 0 888 Library Totals + 6 0 0 0 0 0 (incl. Padding) ---------------------------------------------------------------------- Code (inc. data) RO Data RW Data ZI Data Debug Library Name - 250 16 0 0 0 296 mc_w.l + 788 36 0 4 0 888 mc_w.l ---------------------------------------------------------------------- - 252 16 0 0 0 296 Library Totals + 794 36 0 4 0 888 Library Totals ---------------------------------------------------------------------- @@ -1094,15 +1950,15 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug - 2084 162 316 36 8196 131894 Grand Totals - 2084 162 316 36 8196 131894 ELF Image Totals - 2084 162 316 36 0 0 ROM Totals + 7848 698 1076 116 9900 269426 Grand Totals + 7848 698 1076 116 9900 269426 ELF Image Totals + 7848 698 1076 116 0 0 ROM Totals ============================================================================== - Total RO Size (Code + RO Data) 2400 ( 2.34kB) - Total RW Size (RW Data + ZI Data) 8232 ( 8.04kB) - Total ROM Size (Code + RO Data + RW Data) 2436 ( 2.38kB) + Total RO Size (Code + RO Data) 8924 ( 8.71kB) + Total RW Size (RW Data + ZI Data) 10016 ( 9.78kB) + Total ROM Size (Code + RO Data + RW Data) 9040 ( 8.83kB) ==============================================================================