parent
07406af4f4
commit
0b61bb811a
@ -0,0 +1,79 @@
|
||||
#include "app_gpio.h"
|
||||
|
||||
void Gpio_Port_Initialization(void)
|
||||
{
|
||||
SYS_ClockEnable(SYS_PERIPH_CLOCK_GPIO0);
|
||||
}
|
||||
|
||||
|
||||
void GPIO0_IRQHandler(void)
|
||||
{
|
||||
GPIO_Handler(0);
|
||||
}
|
||||
|
||||
void Gpio_Set_Port_Output(uint32_t Port, uint32_t Pin, gpio_pad_t PullUpDown)
|
||||
{
|
||||
gpio_cfg_t gpio_out;
|
||||
gpio_out.port = Port;
|
||||
gpio_out.mask = Pin;
|
||||
gpio_out.pad = PullUpDown;
|
||||
gpio_out.func = GPIO_FUNC_OUT;
|
||||
GPIO_Config(&gpio_out);
|
||||
}
|
||||
|
||||
void Gpio_Set_Port_Input(uint32_t Port, uint32_t Pin, gpio_pad_t PullUpDown)
|
||||
{
|
||||
gpio_cfg_t gpio_in;
|
||||
gpio_in.port = Port;
|
||||
gpio_in.mask = Pin;
|
||||
gpio_in.pad = PullUpDown;
|
||||
gpio_in.func = GPIO_FUNC_IN;
|
||||
GPIO_Config(&gpio_in);
|
||||
}
|
||||
|
||||
void Gpio_Register_Interrupt_Callback(uint32_t Port, uint32_t Pin, gpio_pad_t PullUpDown, gpio_int_pol_t int_state, gpio_callback_fn callback, void* pCallbackParam)
|
||||
{
|
||||
gpio_cfg_t gpio_interrupt;
|
||||
gpio_interrupt.port = Port;
|
||||
gpio_interrupt.mask = Pin;
|
||||
gpio_interrupt.pad = PullUpDown;
|
||||
gpio_interrupt.func = GPIO_FUNC_IN;
|
||||
|
||||
GPIO_Config(&gpio_interrupt);
|
||||
GPIO_RegisterCallback(&gpio_interrupt, callback, pCallbackParam);
|
||||
GPIO_IntConfig(&gpio_interrupt, GPIO_INT_EDGE, int_state);
|
||||
GPIO_IntEnable(&gpio_interrupt);
|
||||
NVIC_EnableIRQ((IRQn_Type)MXC_GPIO_GET_IRQ(Port));
|
||||
}
|
||||
|
||||
void Gpio_UnRegister_Interrupt_Callback(uint32_t port, uint32_t pin)
|
||||
{
|
||||
gpio_cfg_t gpio_interrupt;
|
||||
gpio_interrupt.port = port;
|
||||
gpio_interrupt.mask = pin;
|
||||
GPIO_RegisterCallback(&gpio_interrupt, NULL, NULL);
|
||||
}
|
||||
|
||||
uint32_t Gpio_Get_InputState(uint32_t Port, uint32_t Pin)
|
||||
{
|
||||
mxc_gpio_regs_t *gpio = MXC_GPIO_GET_GPIO(Port);
|
||||
return (gpio->in & Pin);
|
||||
}
|
||||
|
||||
void Gpio_Output_Set(uint32_t port, uint32_t pin)
|
||||
{
|
||||
mxc_gpio_regs_t *gpio = MXC_GPIO_GET_GPIO(port);
|
||||
gpio->out_set = pin;
|
||||
}
|
||||
|
||||
void Gpio_Output_Clear(uint32_t port, uint32_t pin)
|
||||
{
|
||||
mxc_gpio_regs_t *gpio = MXC_GPIO_GET_GPIO(port);
|
||||
gpio->out_clr = pin;
|
||||
}
|
||||
|
||||
void Gpio_Output_Toggle(uint32_t port, uint32_t pin)
|
||||
{
|
||||
mxc_gpio_regs_t *gpio = MXC_GPIO_GET_GPIO(port);
|
||||
gpio->out ^= pin;
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
/** \file app_gpio.h */
|
||||
#if !defined(APP_GPIO_H__A8A8D350_41F8_4088_82AF_828DD09BCABF__INCLUDED_)
|
||||
#define APP_GPIO_H__A8A8D350_41F8_4088_82AF_828DD09BCABF__INCLUDED_
|
||||
|
||||
#include "board_config.h"
|
||||
|
||||
void Gpio_Port_Initialization(void);
|
||||
|
||||
void Gpio_Set_Port_Output(uint32_t Port, uint32_t Pin, gpio_pad_t PullUpDown);
|
||||
void Gpio_Set_Port_Input(uint32_t Port, uint32_t Pin, gpio_pad_t PullUpDown);
|
||||
void Gpio_Register_Interrupt_Callback(uint32_t Port, uint32_t Pin, gpio_pad_t PullUpDown, gpio_int_pol_t int_state, gpio_callback_fn callback, void* pCallbackParam);
|
||||
void Gpio_UnRegister_Interrupt_Callback(uint32_t port, uint32_t pin);
|
||||
uint32_t Gpio_Get_InputState(uint32_t Port, uint32_t Pin);
|
||||
void Gpio_Output_Set(uint32_t port, uint32_t pin);
|
||||
void Gpio_Output_Clear(uint32_t port, uint32_t pin);
|
||||
void Gpio_Output_Toggle(uint32_t port, uint32_t pin);
|
||||
|
||||
|
||||
|
||||
#endif
|
@ -0,0 +1,269 @@
|
||||
#include "app_oled.h"
|
||||
#include "app_gpio.h"
|
||||
#include "app_log.h"
|
||||
#include "sw_timer.h"
|
||||
#include "ssd1306.h"
|
||||
|
||||
|
||||
#define OLED_POWER_PORT PORT_0
|
||||
#define OLED_POWER_PIN PIN_4
|
||||
|
||||
#define OLED_POWER_ON Gpio_Output_Set(OLED_POWER_PORT, OLED_POWER_PIN);
|
||||
#define OLED_POWER_OFF Gpio_Output_Clear(OLED_POWER_PORT, OLED_POWER_PIN);
|
||||
#define OLED_POWER_T Gpio_Output_Toggle(OLED_POWER_PORT, OLED_POWER_PIN);
|
||||
|
||||
|
||||
#define OLED_POWER_ON_OFF_WAIT_TIME 100
|
||||
#define OLED_ERROR_PRINT_INTERVAL 1000
|
||||
#define OLED_SHOW_LOG_WAIT_TIME 1000
|
||||
#define OLED_SHOW_LOG_INVERSE_WAIT_TIME 1000
|
||||
#define OLED_UPDATE_TEMP_INTERVAL 100
|
||||
|
||||
|
||||
|
||||
static OLED_STEP oled_step;
|
||||
static OLED_STEP oled_pre_step;
|
||||
static uint32_t oled_tickCount;
|
||||
uint32_t oled_shift_index;
|
||||
|
||||
uint16_t oled_draw_temp;
|
||||
|
||||
|
||||
static void Oled_Process(void);
|
||||
static void Oled_Next_Step(OLED_STEP nextStep);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool Oled_Initialization(void)
|
||||
{
|
||||
oled_step = OLED_STEP_INIT;
|
||||
oled_pre_step = OLED_STEP_INIT;
|
||||
|
||||
//Gpio_Set_Port_Output(OLED_POWER_PORT, OLED_POWER_PIN, GPIO_PAD_PULL_UP);
|
||||
//OLED_POWER_OFF;
|
||||
|
||||
SW_Timer_Callback_Register(SW_TIMER_RUN_CONTINUE, 1, Oled_Process);
|
||||
}
|
||||
|
||||
|
||||
void Oled_Test(void)
|
||||
{
|
||||
OLED_POWER_T;
|
||||
}
|
||||
|
||||
static void Oled_Process(void)
|
||||
{
|
||||
switch(oled_step)
|
||||
{
|
||||
case OLED_STEP_INIT:
|
||||
Gpio_Set_Port_Output(OLED_POWER_PORT, OLED_POWER_PIN, GPIO_PAD_PULL_UP);
|
||||
OLED_POWER_OFF;
|
||||
oled_tickCount = millis();
|
||||
Oled_Next_Step(OLED_STEP_POWER_OFF_WAIT);
|
||||
|
||||
break;
|
||||
case OLED_STEP_POWER_OFF_WAIT:
|
||||
if((millis() - oled_tickCount) >= OLED_POWER_ON_OFF_WAIT_TIME)
|
||||
{
|
||||
Oled_Next_Step(OLED_STEP_POWER_ON);
|
||||
}
|
||||
break;
|
||||
case OLED_STEP_POWER_ON:
|
||||
OLED_POWER_ON;
|
||||
oled_tickCount = millis();
|
||||
Oled_Next_Step(OLED_STEP_POWER_ON_WAIT);
|
||||
break;
|
||||
case OLED_STEP_POWER_ON_WAIT:
|
||||
if((millis() - oled_tickCount) >= OLED_POWER_ON_OFF_WAIT_TIME)
|
||||
{
|
||||
Oled_Next_Step(OLED_STEP_SET_INIT);
|
||||
}
|
||||
break;
|
||||
case OLED_STEP_SET_INIT:
|
||||
if(SSD1306_Init(SSD1306_ADDR) != SSD1306_SUCCESS)
|
||||
{
|
||||
Oled_Next_Step(OLED_STEP_ERROR);
|
||||
}
|
||||
else
|
||||
{
|
||||
Oled_Next_Step(OLED_STEP_NORMAL_SCREEN_SET);
|
||||
}
|
||||
break;
|
||||
|
||||
case OLED_STEP_NORMAL_SCREEN_SET:
|
||||
SSD1306_NormalScreen (SSD1306_ADDR);
|
||||
SSD1306_ClearScreen ();
|
||||
Oled_Next_Step(OLED_STEP_DRAW_LOG);
|
||||
break;
|
||||
case OLED_STEP_DRAW_LOG:
|
||||
SSD1306_DrawBackGround_Log();
|
||||
SSD1306_UpdateScreen (SSD1306_ADDR);
|
||||
oled_tickCount = millis();
|
||||
Oled_Next_Step(OLED_STEP_WAIT_LOG);
|
||||
break;
|
||||
case OLED_STEP_WAIT_LOG:
|
||||
if((millis() - oled_tickCount) >= OLED_SHOW_LOG_WAIT_TIME)
|
||||
{
|
||||
Oled_Next_Step(OLED_STEP_LOG_INVERSE);
|
||||
}
|
||||
break;
|
||||
case OLED_STEP_LOG_INVERSE:
|
||||
SSD1306_InverseScreen (SSD1306_ADDR);
|
||||
oled_tickCount = millis();
|
||||
Oled_Next_Step(OLED_STEP_WAIT_LOG_INVERSE);
|
||||
break;
|
||||
case OLED_STEP_WAIT_LOG_INVERSE:
|
||||
if((millis() - oled_tickCount) >= OLED_SHOW_LOG_INVERSE_WAIT_TIME)
|
||||
{
|
||||
Oled_Next_Step(OLED_STEP_LOG_NORMAL);
|
||||
}
|
||||
break;
|
||||
case OLED_STEP_LOG_NORMAL:
|
||||
SSD1306_NormalScreen (SSD1306_ADDR);
|
||||
oled_shift_index = 0;
|
||||
Oled_Next_Step(OLED_STEP_LOG_LEFT_SCROL);
|
||||
break;
|
||||
case OLED_STEP_LOG_LEFT_SCROL:
|
||||
SSD1306_DrawBackGround_LeftShift(1);
|
||||
if(oled_shift_index % 2 == 0)
|
||||
{
|
||||
SSD1306_UpdateScreen (SSD1306_ADDR);
|
||||
}
|
||||
oled_shift_index++;
|
||||
|
||||
if(oled_shift_index >= 128)
|
||||
{
|
||||
Oled_Next_Step(OLED_STEP_DRAW_BACKGROUND);
|
||||
}
|
||||
|
||||
break;
|
||||
case OLED_STEP_DRAW_BACKGROUND:
|
||||
SSD1306_DrawBackGround();
|
||||
SSD1306_Draw_Temperature(oled_draw_temp);
|
||||
SSD1306_UpdateScreen (SSD1306_ADDR);
|
||||
oled_tickCount = millis();
|
||||
Oled_Next_Step(OLED_STEP_DRAW_TEMP);
|
||||
break;
|
||||
|
||||
case OLED_STEP_DRAW_TEMP:
|
||||
if((millis() - oled_tickCount) >= OLED_UPDATE_TEMP_INTERVAL)
|
||||
{
|
||||
oled_tickCount = millis();
|
||||
SSD1306_Draw_Temperature(oled_draw_temp);
|
||||
SSD1306_UpdateScreen (SSD1306_ADDR);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case OLED_STEP_ERROR:
|
||||
if((millis() - oled_tickCount) >= OLED_ERROR_PRINT_INTERVAL)
|
||||
{
|
||||
oled_tickCount = millis();
|
||||
dbg_printf(LOG_LEVEL_DEBUG, "Oled Step Error %d\r\n", oled_pre_step);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void Oled_Next_Step(OLED_STEP nextStep)
|
||||
{
|
||||
oled_pre_step = oled_step;
|
||||
oled_step = nextStep;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
|
||||
if(SSD1306_Init(SSD1306_ADDR) != SSD1306_SUCCESS)
|
||||
{
|
||||
printf("ssd1306 init fail\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
uint8_t i;
|
||||
SSD1306_NormalScreen (SSD1306_ADDR);
|
||||
SSD1306_ClearScreen ();
|
||||
SSD1306_DrawBackGround_Log();
|
||||
SSD1306_UpdateScreen (SSD1306_ADDR);
|
||||
Delay_ms(1500);
|
||||
SSD1306_InverseScreen (SSD1306_ADDR);
|
||||
Delay_ms(1500);
|
||||
SSD1306_NormalScreen (SSD1306_ADDR);
|
||||
|
||||
for(i = 0 ; i < 128 ; i++)
|
||||
{
|
||||
SSD1306_DrawBackGround_LeftShift(1);
|
||||
if(i % 2 == 0)
|
||||
{
|
||||
SSD1306_UpdateScreen (SSD1306_ADDR);
|
||||
}
|
||||
|
||||
|
||||
//Delay_ms(10);
|
||||
}
|
||||
SSD1306_DrawBackGround();
|
||||
SSD1306_UpdateScreen (SSD1306_ADDR);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
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
|
||||
#endif
|
||||
}
|
||||
#endif
|
@ -0,0 +1,39 @@
|
||||
/** \file app_oled.h */
|
||||
#if !defined(APP_OLED_H__6B909B42_366E_4E67_91F9_577B515933F7__INCLUDED_)
|
||||
#define APP_OLED_H__6B909B42_366E_4E67_91F9_577B515933F7__INCLUDED_
|
||||
|
||||
#include "board_config.h"
|
||||
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
OLED_STEP_INIT,
|
||||
OLED_STEP_POWER_OFF_WAIT,
|
||||
OLED_STEP_POWER_ON,
|
||||
OLED_STEP_POWER_ON_WAIT,
|
||||
OLED_STEP_SET_INIT,
|
||||
|
||||
OLED_STEP_NORMAL_SCREEN_SET,
|
||||
OLED_STEP_DRAW_LOG,
|
||||
OLED_STEP_WAIT_LOG,
|
||||
OLED_STEP_LOG_INVERSE,
|
||||
OLED_STEP_WAIT_LOG_INVERSE,
|
||||
OLED_STEP_LOG_NORMAL,
|
||||
OLED_STEP_LOG_LEFT_SCROL,
|
||||
OLED_STEP_DRAW_BACKGROUND,
|
||||
OLED_STEP_DRAW_TEMP,
|
||||
|
||||
|
||||
OLED_STEP_ERROR,
|
||||
|
||||
|
||||
|
||||
}OLED_STEP;
|
||||
|
||||
|
||||
bool Oled_Initialization(void);
|
||||
|
||||
|
||||
|
||||
#endif
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue