Merge branch 'test-slow-i2c' into BLE
This commit is contained in:
@@ -62,7 +62,11 @@ void hardware_init() {
|
|||||||
setup_timer_scheduler();
|
setup_timer_scheduler();
|
||||||
setup_adc();
|
setup_adc();
|
||||||
setup_pwm();
|
setup_pwm();
|
||||||
I2C_ClockSet(I2C0_ID, 100000); // Sets clock to around 175kHz
|
I2C_SetSclSync(I2C0_ID,1);
|
||||||
|
I2C_SetDeglitchCount(I2C0_ID,1); // Turn on de-glitch
|
||||||
|
//Note on I2C clock rate @ 100Khz the screen update == 20ms which is too long for USB-PD to work
|
||||||
|
//200kHz and above works
|
||||||
|
I2C_ClockSet(I2C0_ID, 300000); // Sets clock to around 25 kHz less than set here
|
||||||
TIMER_SetCompValue(TIMER_CH0, TIMER_COMP_ID_1, 0);
|
TIMER_SetCompValue(TIMER_CH0, TIMER_COMP_ID_1, 0);
|
||||||
}
|
}
|
||||||
void setup_pwm(void) {
|
void setup_pwm(void) {
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ intCallback_Type *i2cIntCbfArra[I2C_ID_MAX][I2C_INT_ALL] = {{NULL}};
|
|||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief I2C interrupt handler
|
* @brief I2C interrupt handler
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -157,7 +157,7 @@ static void I2C_IntHandler(I2C_ID_Type i2cNo) {
|
|||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief I2C write word data
|
* @brief I2C write word data
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -174,7 +174,7 @@ void I2C_SendWord(I2C_ID_Type i2cNo, uint32_t data) {
|
|||||||
BL_WR_REG(I2Cx, I2C_FIFO_WDATA, data);
|
BL_WR_REG(I2Cx, I2C_FIFO_WDATA, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief I2C read word data
|
* @brief I2C read word data
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -190,7 +190,7 @@ uint32_t I2C_RecieveWord(I2C_ID_Type i2cNo) {
|
|||||||
return BL_RD_REG(I2Cx, I2C_FIFO_RDATA);
|
return BL_RD_REG(I2Cx, I2C_FIFO_RDATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief I2C enable
|
* @brief I2C enable
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -210,7 +210,7 @@ void I2C_Enable(I2C_ID_Type i2cNo) {
|
|||||||
BL_WR_REG(I2Cx, I2C_CONFIG, tmpVal);
|
BL_WR_REG(I2Cx, I2C_CONFIG, tmpVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief I2C disable
|
* @brief I2C disable
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -243,7 +243,7 @@ void I2C_Disable(I2C_ID_Type i2cNo) {
|
|||||||
BL_WR_REG(I2Cx, I2C_INT_STS, tmpVal);
|
BL_WR_REG(I2Cx, I2C_INT_STS, tmpVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief I2C set global reset function
|
* @brief I2C set global reset function
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -259,7 +259,7 @@ BL_Err_Type I2C_Reset(I2C_ID_Type i2cNo) {
|
|||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief I2C init function
|
* @brief I2C init function
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -308,7 +308,7 @@ void I2C_Init(I2C_ID_Type i2cNo, I2C_Direction_Type direct, I2C_Transfer_Cfg *cf
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief Set de-glitch function cycle count value
|
* @brief Set de-glitch function cycle count value
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -343,7 +343,7 @@ BL_Err_Type I2C_SetDeglitchCount(I2C_ID_Type i2cNo, uint8_t cnt) {
|
|||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief Set i2c prd
|
* @brief Set i2c prd
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -380,7 +380,7 @@ void I2C_SetPrd(I2C_ID_Type i2cNo, uint8_t phase) {
|
|||||||
BL_WR_REG(I2Cx, I2C_PRD_DATA, tmpVal);
|
BL_WR_REG(I2Cx, I2C_PRD_DATA, tmpVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief I2C set scl output clock
|
* @brief I2C set scl output clock
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -412,7 +412,7 @@ void I2C_ClockSet(I2C_ID_Type i2cNo, uint32_t clk) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief I2C set scl sync
|
* @brief I2C set scl sync
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -439,7 +439,7 @@ void I2C_SetSclSync(I2C_ID_Type i2cNo, uint8_t enable) {
|
|||||||
BL_WR_REG(I2Cx, I2C_CONFIG, tmpVal);
|
BL_WR_REG(I2Cx, I2C_CONFIG, tmpVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief Get i2c busy state
|
* @brief Get i2c busy state
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -458,7 +458,7 @@ BL_Sts_Type I2C_IsBusy(I2C_ID_Type i2cNo) {
|
|||||||
return ((BL_IS_REG_BIT_SET(tmpVal, I2C_STS_I2C_BUS_BUSY)) ? SET : RESET);
|
return ((BL_IS_REG_BIT_SET(tmpVal, I2C_STS_I2C_BUS_BUSY)) ? SET : RESET);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief Get i2c transfer end state
|
* @brief Get i2c transfer end state
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -477,7 +477,7 @@ BL_Sts_Type I2C_TransferEndStatus(I2C_ID_Type i2cNo) {
|
|||||||
return ((BL_IS_REG_BIT_SET(tmpVal, I2C_END_INT)) ? SET : RESET);
|
return ((BL_IS_REG_BIT_SET(tmpVal, I2C_END_INT)) ? SET : RESET);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief I2C master write block data
|
* @brief I2C master write block data
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -550,7 +550,7 @@ BL_Err_Type I2C_MasterSendBlocking(I2C_ID_Type i2cNo, I2C_Transfer_Cfg *cfg) {
|
|||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief I2C master read block data
|
* @brief I2C master read block data
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -643,7 +643,7 @@ BL_Err_Type I2C_MasterReceiveBlocking(I2C_ID_Type i2cNo, I2C_Transfer_Cfg *cfg)
|
|||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief Mask/Unmask the I2C interrupt
|
* @brief Mask/Unmask the I2C interrupt
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -783,7 +783,7 @@ void I2C_IntMask(I2C_ID_Type i2cNo, I2C_INT_Type intType, BL_Mask_Type intMask)
|
|||||||
BL_WR_REG(I2Cx, I2C_INT_STS, tmpVal);
|
BL_WR_REG(I2Cx, I2C_INT_STS, tmpVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief Install I2C interrupt callback function
|
* @brief Install I2C interrupt callback function
|
||||||
*
|
*
|
||||||
* @param i2cNo: I2C ID type
|
* @param i2cNo: I2C ID type
|
||||||
@@ -803,7 +803,7 @@ void I2C_Int_Callback_Install(I2C_ID_Type i2cNo, I2C_INT_Type intType, intCallba
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/****************************************************************************/ /**
|
/**
|
||||||
* @brief I2C IRQ handler
|
* @brief I2C IRQ handler
|
||||||
*
|
*
|
||||||
* @param None
|
* @param None
|
||||||
|
|||||||
@@ -361,13 +361,17 @@ void OLED::setRotation(bool leftHanded) {
|
|||||||
OLED_Setup_Array[9].val = 0xA0;
|
OLED_Setup_Array[9].val = 0xA0;
|
||||||
}
|
}
|
||||||
I2C_CLASS::writeRegistersBulk(DEVICEADDR_OLED, OLED_Setup_Array, sizeof(OLED_Setup_Array) / sizeof(OLED_Setup_Array[0]));
|
I2C_CLASS::writeRegistersBulk(DEVICEADDR_OLED, OLED_Setup_Array, sizeof(OLED_Setup_Array) / sizeof(OLED_Setup_Array[0]));
|
||||||
|
osDelay(TICKS_10MS);
|
||||||
inLeftHandedMode = leftHanded;
|
inLeftHandedMode = leftHanded;
|
||||||
|
|
||||||
screenBuffer[5] = inLeftHandedMode ? 0 : 32; // display is shifted by 32 in left handed
|
screenBuffer[5] = inLeftHandedMode ? 0 : 32; // display is shifted by 32 in left handed
|
||||||
// mode as driver ram is 128 wide
|
// mode as driver ram is 128 wide
|
||||||
screenBuffer[7] = inLeftHandedMode ? 95 : 0x7F; // End address of the ram segment we are writing to (96 wide)
|
screenBuffer[7] = inLeftHandedMode ? 95 : 0x7F; // End address of the ram segment we are writing to (96 wide)
|
||||||
screenBuffer[9] = inLeftHandedMode ? 0xC8 : 0xC0;
|
screenBuffer[9] = inLeftHandedMode ? 0xC8 : 0xC0;
|
||||||
|
//Force a screen refresh
|
||||||
|
const int len = FRAMEBUFFER_START + (OLED_WIDTH * 2);
|
||||||
|
I2C_CLASS::Transmit(DEVICEADDR_OLED, screenBuffer, len);
|
||||||
|
osDelay(TICKS_10MS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OLED::setBrightness(uint8_t contrast) {
|
void OLED::setBrightness(uint8_t contrast) {
|
||||||
|
|||||||
@@ -1105,17 +1105,18 @@ void startGUITask(void const *argument) {
|
|||||||
} else {
|
} else {
|
||||||
setStatusLED(LED_STANDBY);
|
setStatusLED(LED_STANDBY);
|
||||||
}
|
}
|
||||||
// Preemptively turn the display on. Turn it off if and only if
|
// Turn it off if and only if
|
||||||
// the tip temperature is below 50 degrees C *and* motion sleep
|
// the tip temperature is below 50 degrees C *and* motion sleep
|
||||||
// detection is enabled *and* there has been no activity (movement or
|
// detection is enabled *and* there has been no activity (movement or
|
||||||
// button presses) in a while.
|
// button presses) in a while.
|
||||||
// This is zero cost really as state is only changed on display updates
|
// This is zero cost really as state is only changed on display updates
|
||||||
OLED::setDisplayState(OLED::DisplayState::ON);
|
|
||||||
|
|
||||||
if ((tipTemp < 50) && getSettingValue(SettingsOptions::Sensitivity)
|
if ((tipTemp < 50) && getSettingValue(SettingsOptions::Sensitivity)
|
||||||
&& (((xTaskGetTickCount() - lastMovementTime) > MOVEMENT_INACTIVITY_TIME) && ((xTaskGetTickCount() - lastButtonTime) > BUTTON_INACTIVITY_TIME))) {
|
&& (((xTaskGetTickCount() - lastMovementTime) > MOVEMENT_INACTIVITY_TIME) && ((xTaskGetTickCount() - lastButtonTime) > BUTTON_INACTIVITY_TIME))) {
|
||||||
OLED::setDisplayState(OLED::DisplayState::OFF);
|
OLED::setDisplayState(OLED::DisplayState::OFF);
|
||||||
setStatusLED(LED_OFF);
|
setStatusLED(LED_OFF);
|
||||||
|
}else {
|
||||||
|
OLED::setDisplayState(OLED::DisplayState::ON);
|
||||||
}
|
}
|
||||||
// Clear the lcd buffer
|
// Clear the lcd buffer
|
||||||
OLED::clearScreen();
|
OLED::clearScreen();
|
||||||
|
|||||||
Reference in New Issue
Block a user