Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save andrewsclapp/af1f41537a95710198603bb6f3758872 to your computer and use it in GitHub Desktop.
Save andrewsclapp/af1f41537a95710198603bb6f3758872 to your computer and use it in GitHub Desktop.
test1-adc
\res MCU: STM8L051
\res export CLK_PCKENR2
5 CONSTANT PCKEN25
#require ]B!
#require WIPE
NVM
: adcCLKCFG ( -- )
[ 1 CLK_PCKENR2 PCKEN25 ]B!
;
RAM
WIPE
\res MCU: STM8L051
\res export RI_ASCR1 RI_IOSR2
#require ]C!
#require WIPE
NVM
: INITRI ( -- )
[ $82 RI_IOSR2 ]C!
\ [ $82 RI_ASCR1 ]C!
[ $00 RI_ASCR1 ]C!
;
RAM
WIPE
\res MCU: STM8L051
\res export ADC1_CR1 ADC1_CR2 ADC1_SR ADC1_DRH ADC1_DRL
4 CONSTANT ADC_CR1_CONT
96 CONSTANT ADC_CR1_RES
2 CONSTANT ADC_CR1_START
1 CONSTANT ADC_CR1_ADON
128 CONSTANT ADC_CR2_PRESC
0 CONSTANT ADC_PRESC_1
128 CONSTANT ADC_PRESC_2
0 CONSTANT ADC_Res_12Bit
#require C!
#require WIPE
NVM
: ADCINIT ( -- )
\ ADCINIT - conversion mode single, resolution 12bit, prescaler 1
ADC_CR1_CONT ADC_CR1_RES OR NOT ADC1_CR1 @ AND ADC1_CR1 C! \ ADC_CR1 Register
ADC_CR2_PRESC NOT ADC1_CR2 @ AND ADC1_CR2 C! \ res
ADC_PRESC_2 ADC1_CR2 @ OR ADC1_CR2 C! \ Set ADC_Prescalar_1
;
RAM
WIPE
7 CONSTANT ADC_384_Cycles \ slow
2 CONSTANT ADC_16_Cycles \ fast
7 CONSTANT ADC_CR2_SMPT1
\res MCU: STM8L051
\res export ADC1_CR1 ADC1_CR2 ADC1_SR ADC1_DRH ADC1_DRL
#require C!
#require WIPE
NVM
: STCFG ( -- )
\ STCFG
ADC_CR2_SMPT1 NOT ADC1_CR2 @ AND ADC1_CR2 C! \ SamplingTimeConfig
ADC_16_Cycles ADC1_CR2 @ OR ADC1_CR2 C! \ 16_Cycles - slowest
;
RAM
WIPE
1 CONSTANT ADC_CR1_ADON
\res MCU: STM8L051
\res export ADC1_CR1 ADC1_CR2 ADC1_SR ADC1_DRH ADC1_DRL
#require C!
#require WIPE
NVM
\ ADC on-off control
\ The ADC can be powered-on by setting the ADON bit in the ADC_CR1 register.
\ When the ADON bit is set, it wakes up the ADC from Power-down mode.
\ Conversion should be started only when the ADC power-up time (t WKUP )
\ has elapsed and before the ADC maximum idle delay (t IDLE ) has elapsed.
\ The software can stop conversion and put the ADC
\ in Power-down mode by resetting the ADON bit.
: ADCEN ( -- )
\ ADCEN - ADC_Cmd(ADC1, ENABLE);
ADC_CR1_ADON ADC1_CR1 @ OR ADC1_CR1 C! \ ADC Enable
;
RAM
WIPE
784 CONSTANT ADC_Channel_4
320 CONSTANT ADC_Channel_22
\res MCU: STM8L051
\res export ADC1_SQR1 ADC1_SQR2 ADC1_SQR3 ADC1_SQR4
#require C!
#require WIPE
NVM
: ADCCH ( -- )
\ ADCCH - ADC_ChannelCmd(ADC1, Channel, ENABLE
\ not sure about this
\ ADC_Channel_4 ADC1_SQR1 @ OR ADC1_SQR1 C! \ ADC Enable Channel - voltage
ADC_Channel_22 ADC1_SQR1 @ OR ADC1_SQR1 C! \ ADC Enable Channel - current
;
RAM
WIPE
#require C!
#require WIPE
NVM
2 CONSTANT ADC_CR1_START
\res MCU: STM8L051
\res export ADC1_CR1 ADC1_CR2 ADC1_SR ADC1_DRH ADC1_DRL
: STARTCONV ( -- )
\ STARTCONV - ADC_SoftwareStartConf(ADC1);
\ not sure about this
ADC_CR1_START ADC1_CR1 @ OR ADC1_CR1 C!
;
RAM
WIPE
\res MCU: STM8L051
\res export ADC1_CR1 ADC1_CR2 ADC1_SR ADC1_DRH ADC1_DRL
#require WIPE
NVM
: WAITCONV ( -- )
\ WAITCONV
\ Function
\ while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET) {
\ }
\ begin ADC1_SR @ ADC_FLAG_EOC AND 0 = until
\ but ADC_FLAG_EOC is 1
begin ADC1_SR @ 1 AND 0 = until
;
RAM
WIPE
\res MCU: STM8L051
\res export ADC1_CR1 ADC1_CR2 ADC1_SR ADC1_DRH ADC1_DRL
#require WIPE
NVM
: ADCGETVAL ( -- a )
\ ADCGETVAL - ADC_GetConversionValue(ADC1);
ADC1_DRH @ 2* ADC1_DRL @ AND \ it is left on the stack
;
RAM
WIPE
\ : showv 4 ADC! ADC@ . ;
\ : showa 22 ADC! ADC@ . ;
: ADCRD
adcCLKCFG
INITRI
ADCINIT
STCFG
ADCEN
ADCCH
STARTCONV
WAITCONV
ADCGETVAL
;
\ ADCRD .
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment