diff --git a/audio.c b/audio.c index f083906..735fae9 100644 --- a/audio.c +++ b/audio.c @@ -275,12 +275,12 @@ void AUDIO_PlayBeep(beep_type_t Beep) GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_VOICE_1); else GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_VOICE_1); - SYSTICK_DelayUs(1000); + SYSTICK_Delay250us(4000); GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_VOICE_0); - SYSTICK_DelayUs(1200); + SYSTICK_Delay250us(4800); GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_VOICE_0); VoiceID <<= 1; - SYSTICK_DelayUs(200); + SYSTICK_Delay250us(800); } } diff --git a/driver/bk4819.c b/driver/bk4819.c index 0ef3f2f..08131d7 100644 --- a/driver/bk4819.c +++ b/driver/bk4819.c @@ -144,7 +144,7 @@ static uint16_t BK4819_ReadU16(void) PORTCON_PORTC_IE = (PORTCON_PORTC_IE & ~PORTCON_PORTC_IE_C2_MASK) | PORTCON_PORTC_IE_C2_BITS_ENABLE; GPIOC->DIR = (GPIOC->DIR & ~GPIO_DIR_2_MASK) | GPIO_DIR_2_BITS_INPUT; - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); Value = 0; for (i = 0; i < 16; i++) @@ -152,9 +152,9 @@ static uint16_t BK4819_ReadU16(void) Value <<= 1; Value |= GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); } PORTCON_PORTC_IE = (PORTCON_PORTC_IE & ~PORTCON_PORTC_IE_C2_MASK) | PORTCON_PORTC_IE_C2_BITS_DISABLE; GPIOC->DIR = (GPIOC->DIR & ~GPIO_DIR_2_MASK) | GPIO_DIR_2_BITS_OUTPUT; @@ -169,14 +169,14 @@ uint16_t BK4819_ReadRegister(const uint8_t Register) GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); BK4819_WriteU8(Register | 0x80); Value = BK4819_ReadU16(); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); @@ -188,12 +188,12 @@ void BK4819_WriteRegister(const uint8_t Register, uint16_t Data) { GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); BK4819_WriteU8(Register); BK4819_WriteU16(Data); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); } @@ -210,14 +210,14 @@ void BK4819_WriteU8(uint8_t Data) else GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); Data <<= 1; GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); } } @@ -233,14 +233,14 @@ void BK4819_WriteU16(uint16_t Data) else GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); Data <<= 1; - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); } } void BK4819_EnableAFC(void) diff --git a/driver/i2c.c b/driver/i2c.c index eb844d2..dda2212 100644 --- a/driver/i2c.c +++ b/driver/i2c.c @@ -23,25 +23,25 @@ void I2C_Start(void) { GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); } void I2C_Stop(void) { GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); } uint8_t I2C_Read_fast(bool bFinal) @@ -97,31 +97,31 @@ uint8_t I2C_Read(bool bFinal) for (i = 0; i < 8; i++) { GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); Data <<= 1; - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); if (GPIO_CheckBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA)) Data |= 1U; GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); } PORTCON_PORTA_IE &= ~PORTCON_PORTA_IE_A11_MASK; PORTCON_PORTA_OD |= PORTCON_PORTA_OD_A11_BITS_ENABLE; GPIOA->DIR |= GPIO_DIR_11_BITS_OUTPUT; GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); if (bFinal) GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); else GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); return Data; } @@ -132,7 +132,7 @@ int I2C_Write(uint8_t Data) int ret = -1; GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); for (i = 0; i < 8; i++) { if ((Data & 0x80) == 0) { GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); @@ -140,20 +140,20 @@ int I2C_Write(uint8_t Data) GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); } Data <<= 1; - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); } PORTCON_PORTA_IE |= PORTCON_PORTA_IE_A11_BITS_ENABLE; PORTCON_PORTA_OD &= ~PORTCON_PORTA_OD_A11_MASK; GPIOA->DIR &= ~GPIO_DIR_11_MASK; GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); for (i = 0; i < 255; i++) { if (GPIO_CheckBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA) == 0) { @@ -163,7 +163,7 @@ int I2C_Write(uint8_t Data) } GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); PORTCON_PORTA_IE &= ~PORTCON_PORTA_IE_A11_MASK; PORTCON_PORTA_OD |= PORTCON_PORTA_OD_A11_BITS_ENABLE; GPIOA->DIR |= GPIO_DIR_11_BITS_OUTPUT; diff --git a/driver/keyboard.c b/driver/keyboard.c index b50b25f..315f536 100644 --- a/driver/keyboard.c +++ b/driver/keyboard.c @@ -125,7 +125,7 @@ key_code_t KEYBOARD_Poll(void) for (i = 0, k = 0, reg = 0; i < 3 && k < 8; i++, k++) { uint16_t reg2; - SYSTICK_DelayUs(1); + SYSTICK_Delay250ns(4); reg2 = GPIOA->DATA; if (reg != reg2) { // noise diff --git a/driver/system.c b/driver/system.c index abcfb06..22a210f 100644 --- a/driver/system.c +++ b/driver/system.c @@ -19,9 +19,9 @@ #include "driver/system.h" #include "driver/systick.h" -void SYSTEM_DelayMs(uint32_t Delay) +void SYSTEM_DelayMs(const uint32_t Delay) { - SYSTICK_DelayUs(Delay * 1000); + SYSTICK_Delay250ns(Delay * 4000); } void SYSTEM_ConfigureClocks(void) diff --git a/driver/system.h b/driver/system.h index 6f285b2..93937f6 100644 --- a/driver/system.h +++ b/driver/system.h @@ -19,7 +19,7 @@ #include -void SYSTEM_DelayMs(uint32_t Delay); +void SYSTEM_DelayMs(const uint32_t Delay); void SYSTEM_ConfigureClocks(void); #endif diff --git a/driver/systick.c b/driver/systick.c index d72eee9..d2aafe0 100644 --- a/driver/systick.c +++ b/driver/systick.c @@ -27,27 +27,6 @@ void SYSTICK_Init(void) gTickMultiplier = 48; } -void SYSTICK_DelayUs(const uint32_t Delay) -{ - const uint32_t ticks = Delay * gTickMultiplier; - uint32_t i = 0; - uint32_t Start = SysTick->LOAD; - uint32_t Previous = SysTick->VAL; - - do { - uint32_t Delta; - uint32_t Current; - - do Current = SysTick->VAL; - while (Current == Previous); - - Delta = (Current < Previous) ? -Current : Start - Current; - i += Delta + Previous; - Previous = Current; - - } while (i < ticks); -} - void SYSTICK_Delay250ns(const uint32_t Delay) { const uint32_t ticks = (Delay * gTickMultiplier) >> 2; diff --git a/driver/systick.h b/driver/systick.h index 9e2871f..9acc6ff 100644 --- a/driver/systick.h +++ b/driver/systick.h @@ -20,7 +20,6 @@ #include void SYSTICK_Init(void); -void SYSTICK_DelayUs(const uint32_t Delay); void SYSTICK_Delay250ns(const uint32_t Delay); #endif diff --git a/firmware.bin b/firmware.bin index a96a8fa..8d485c3 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index b30f5f6..ec1034f 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ