From fe3d8b4956f226cb898134c27c2ffab94eb6412c Mon Sep 17 00:00:00 2001 From: Miducc Date: Fri, 23 Jun 2023 09:37:29 +0700 Subject: [PATCH] Initialize alarm signal when ADC value is greater than 0xF0 --- inc/afe_configuration.h | 26 ++++++ src/afe_cofiguration.c | 175 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 201 insertions(+) create mode 100644 inc/afe_configuration.h create mode 100644 src/afe_cofiguration.c diff --git a/inc/afe_configuration.h b/inc/afe_configuration.h new file mode 100644 index 0000000..1b67f5a --- /dev/null +++ b/inc/afe_configuration.h @@ -0,0 +1,26 @@ +#ifndef _AFE_CONFIGURATION_ +#define _AFE_CONFIGURATION_ + +#define ISINK0_CURRENT 4 +#define ISINK1_CURRENT 0 +#define AFE_R1 15 +#define AFE_R2 15 +#define AFE_R3 0 +#define ISINK0_DELAY 2 +#define ISINK1_DELAY 2 + +void opa0_calib(); +void opa1_calib(); +void opa_config(); +void isink0_on(); +void isink1_on(); +void isink0_off(); +void isink1_off(); +void opa_on(); +void opa_off(); +void isink0_delay(); +void isink1_delay(); +void opa_delay(uint8_t delay); +void afe_init(); + +#endif \ No newline at end of file diff --git a/src/afe_cofiguration.c b/src/afe_cofiguration.c new file mode 100644 index 0000000..ee150cd --- /dev/null +++ b/src/afe_cofiguration.c @@ -0,0 +1,175 @@ +#include "BA45F5250.h" +#include "stdint.h" +#include "build-in.h" +#include "afe_configuration.h" +#include "ad_converter.h" +#include "macro_define.h" +#include "system_function.h" + +void opa0_calib() +{ + uint8_t R_TMP0, R_TMP1; + R_TMP0 = 0x00; + R_TMP1 = 0x00; + _sda0vos = 0b11111111; + GCC_DELAY(2000); + while(_sda0o) + { + _sda0vos--; + GCC_DELAY(2000); + } + R_TMP0 = _sda0vos & 0b00111111; + _sda0vos = 0b11000000; + GCC_DELAY(2000); + while(!_sda0o) + { + _sda0vos++; + GCC_DELAY(2000); + } + R_TMP1 = _sda0vos & 0b00111111; + _sda0vos = (R_TMP0 + R_TMP1) / 2; +} + +void opa1_calib() +{ + uint8_t R_TMP0, R_TMP1; + R_TMP0 = 0x00; + R_TMP1 = 0x00; + _sda1vos = 0b11111111; + GCC_DELAY(2000); + while(_sda1o) + { + _sda1vos--; + GCC_DELAY(2000); + } + R_TMP0 = _sda1vos & 0b00111111; + _sda1vos = 0b11000000; + GCC_DELAY(2000); + while(!_sda1o) + { + _sda1vos++; + GCC_DELAY(2000); + } + R_TMP1 = _sda1vos & 0b00111111; + _sda1vos = (R_TMP0 + R_TMP1) / 2; +} + +void opa_config() +{ + _isgdata0 = ISINK0_CURRENT; + _isgdata1 = ISINK1_CURRENT; + _sdpgac0 = AFE_R1; + _sdpgac1 = (AFE_R3 << 6) + AFE_R2; + _sda0c = 0b01000011; + _sda1c = 0b01000011; + _sdsw = 0b00100110; + opa0_calib(); + opa1_calib(); +} + +void isink0_on() +{ + _isgen = 1; + _isgs0 = 1; + isink0_delay(); +} + +void isink1_on() +{ + _isgen = 1; + _isgs1 = 1; + isink1_delay(); +} + +void isink0_off() +{ + _isgen = 0; + _isgs0 = 0; +} + +void isink1_off() +{ + _isgen = 0; + _isgs1 = 0; +} + +void opa_on() +{ + _sds0 = 1; + _sda0en = 1; + opa_delay(2); + _sda1en = 1; + opa_delay(2); +} + +void opa_off() +{ + _sda0en = 0; + _sda1en = 0; + _sds0 = 0; +} + +void isink0_delay() +{ + uint8_t i; + for(i = 0; i < ISINK0_DELAY; i++) + { + #if _HIRCC_8M + GCC_DELAY(93); + #elif _HIRCC_4M + GCC_DELAY(43); + #else + GCC_DELAY(18); + #endif + } +} + +void isink1_delay() +{ + uint8_t i; + for(i = 0; i < ISINK1_DELAY; i++) + { + #if _HIRCC_8M + GCC_DELAY(93); + #elif _HIRCC_4M + GCC_DELAY(43); + #else + GCC_DELAY(18); + #endif + } +} + +void opa_delay(uint8_t delay) +{ + uint8_t i; + for(i = 0; i < delay; i++) + { + #if _HIRCC_8M + GCC_DELAY(193); + #elif _HIRCC_4M + GCC_DELAY(93); + #else + GCC_DELAY(43); + #endif + } +} + +void afe_init() +{ + opa_on(); + isink0_on(); + isink1_on(); + while(read_adc() >= 0xf0) + { + GCC_CLRWDT(); + _pb2 = 1; + _pton = 1; + delay(200); + _pb2 = 0; + _pton = 0; + delay(200); + } + isink0_off(); + isink1_off(); + opa_off(); +} \ No newline at end of file