123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686 |
- /*!
- \file gd32f3x0_tsi.c
- \brief TSI driver
-
- \version 2017-06-06, V1.0.0, firmware for GD32F3x0
- \version 2019-06-01, V2.0.0, firmware for GD32F3x0
- */
- /*
- Copyright (c) 2019, GigaDevice Semiconductor Inc.
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- 3. Neither the name of the copyright holder nor the names of its contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission.
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- OF SUCH DAMAGE.
- */
- #include "gd32f3x0_tsi.h"
- /*!
- \brief reset TSI peripheral
- \param[in] none
- \param[out] none
- \retval none
- */
- void tsi_deinit(void)
- {
- rcu_periph_reset_enable(RCU_TSIRST);
- rcu_periph_reset_disable(RCU_TSIRST);
- }
- /*!
- \brief initialize TSI plus prescaler,charge plus,transfer plus,max cycle number
- \param[in] prescaler: CTCLK clock division factor
- only one parameter can be selected which is shown as below:
- \arg TSI_CTCDIV_DIV1: fCTCLK = fHCLK
- \arg TSI_CTCDIV_DIV2: fCTCLK = fHCLK/2
- \arg TSI_CTCDIV_DIV4: fCTCLK = fHCLK/4
- \arg TSI_CTCDIV_DIV8: fCTCLK = fHCLK/8
- \arg TSI_CTCDIV_DIV16: fCTCLK = fHCLK/16
- \arg TSI_CTCDIV_DIV32: fCTCLK = fHCLK/32
- \arg TSI_CTCDIV_DIV64: fCTCLK = fHCLK/64
- \arg TSI_CTCDIV_DIV128: fCTCLK = fHCLK/128
- \arg TSI_CTCDIV_DIV256: fCTCLK = fHCLK/256
- \arg TSI_CTCDIV_DIV512: fCTCLK = fHCLK/512
- \arg TSI_CTCDIV_DIV1024: fCTCLK = fHCLK/1024
- \arg TSI_CTCDIV_DIV2048: fCTCLK = fHCLK/2048
- \arg TSI_CTCDIV_DIV4096: fCTCLK = fHCLK/4096
- \arg TSI_CTCDIV_DIV8192: fCTCLK = fHCLK/8192
- \arg TSI_CTCDIV_DIV16384: fCTCLK = fHCLK/16384
- \arg TSI_CTCDIV_DIV32768: fCTCLK = fHCLK/32768
- \param[in] charge_duration: charge state duration time
- only one parameter can be selected which is shown as below:
- \arg TSI_CHARGE_1CTCLK(x=1..16): the duration time of charge state is x CTCLK
- \param[in] transfer_duration: charge transfer state duration time
- only one parameter can be selected which is shown as below:
- \arg TSI_TRANSFER_xCTCLK(x=1..16): the duration time of transfer state is x CTCLK
- \param[in] max_number: max cycle number
- only one parameter can be selected which is shown as below:
- \arg TSI_MAXNUM255: the max cycle number of a sequence is 255
- \arg TSI_MAXNUM511: the max cycle number of a sequence is 511
- \arg TSI_MAXNUM1023: the max cycle number of a sequence is 1023
- \arg TSI_MAXNUM2047: the max cycle number of a sequence is 2047
- \arg TSI_MAXNUM4095: the max cycle number of a sequence is 4095
- \arg TSI_MAXNUM8191: the max cycle number of a sequence is 8191
- \arg TSI_MAXNUM16383: the max cycle number of a sequence is 16383
- \param[out] none
- \retval none
- */
- void tsi_init(uint32_t prescaler,uint32_t charge_duration,uint32_t transfer_duration,uint32_t max_number)
- {
- uint32_t ctl0,ctl1;
- if(RESET == (TSI_CTL0 & TSI_CTL0_TSIS)){
- if(TSI_CTCDIV_DIV256 > prescaler){
- /* config TSI_CTL0 */
- ctl0 = TSI_CTL0;
- /*configure TSI clock division factor,charge state duration time,charge transfer state duration time */
- ctl0 &= ~(TSI_CTL0_CTCDIV|TSI_CTL0_CTDT|TSI_CTL0_CDT|TSI_CTL0_MCN);
- ctl0 |= ((prescaler<<12U)|charge_duration|transfer_duration|max_number);
- TSI_CTL0 = ctl0;
-
- /* config TSI_CTL1 */
- ctl1 = TSI_CTL1;
- ctl1 &= ~TSI_CTL1_CTCDIV;
- TSI_CTL1 = ctl1;
- }else{
- /* config TSI_CTL0 */
- ctl0 = TSI_CTL0;
- prescaler &= ~0x08U;
- /*configure TSI clock division factor,charge state duration time,charge transfer state duration time */
- ctl0 &= ~(TSI_CTL0_CTCDIV|TSI_CTL0_CTDT|TSI_CTL0_CDT|TSI_CTL0_MCN);
- ctl0 |= ((prescaler<<12U)|charge_duration|transfer_duration|max_number);
- TSI_CTL0 = ctl0;
-
- /* config TSI_CTL1 */
- ctl1 = TSI_CTL1;
- ctl1 |= TSI_CTL1_CTCDIV;
- TSI_CTL1 = ctl1;
- }
- }
- }
- /*!
- \brief enable TSI module
- \param[in] none
- \param[out] none
- \retval none
- */
- void tsi_enable(void)
- {
- TSI_CTL0 |= TSI_CTL0_TSIEN;
- }
- /*!
- \brief disable TSI module
- \param[in] none
- \param[out] none
- \retval none
- */
- void tsi_disable(void)
- {
- TSI_CTL0 &= ~TSI_CTL0_TSIEN;
- }
- /*!
- \brief enable sample pin
- \param[in] sample: sample pin
- one or more parameters can be selected which are shown as below:
- \arg TSI_SAMPCFG_GxPy( x=0..5,y=0..3):pin y of group x is sample pin
- \param[out] none
- \retval none
- */
- void tsi_sample_pin_enable(uint32_t sample)
- {
- if(RESET == (TSI_CTL0 & TSI_CTL0_TSIS)){
- TSI_SAMPCFG |= sample;
- }
- }
- /*!
- \brief disable sample pin
- \param[in] sample: sample pin
- one or more parameters can be selected which are shown as below:
- \arg TSI_SAMPCFG_GxPy( x=0..5,y=0..3): pin y of group x is sample pin
- \param[out] none
- \retval none
- */
- void tsi_sample_pin_disable(uint32_t sample)
- {
- if(RESET == (TSI_CTL0 & TSI_CTL0_TSIS)){
- TSI_SAMPCFG &= ~sample;
- }
- }
- /*!
- \brief enable channel pin
- \param[in] channel: channel pin
- one or more parameters can be selected which are shown as below:
- \arg TSI_CHCFG_GxPy( x=0..5,y=0..3): pin y of group x
- \param[out] none
- \retval none
- */
- void tsi_channel_pin_enable(uint32_t channel)
- {
- TSI_CHCFG |= channel;
- }
- /*!
- \brief disable channel pin
- \param[in] channel: channel pin
- one or more parameters can be selected which are shown as below:
- \arg TSI_CHCFG_GxPy( x=0..5,y=0..3): pin y of group x
- \param[out] none
- \retval none
- */
- void tsi_channel_pin_disable(uint32_t channel)
- {
- TSI_CHCFG &= ~channel;
- }
- /*!
- \brief configure TSI triggering by software
- \param[in] none
- \param[out] none
- \retval none
- */
- void tsi_sofeware_mode_config(void)
- {
- if(RESET == (TSI_CTL0 & TSI_CTL0_TSIS)){
- TSI_CTL0 &= ~TSI_CTL0_TRGMOD;
- }
- }
- /*!
- \brief start a charge-transfer sequence when TSI is in software trigger mode
- \param[in] none
- \param[out] none
- \retval none
- */
- void tsi_software_start(void)
- {
- TSI_CTL0 |= TSI_CTL0_TSIS;
- }
- /*!
- \brief stop a charge-transfer sequence when TSI is in software trigger mode
- \param[in] none
- \param[out] none
- \retval none
- */
- void tsi_software_stop(void)
- {
- TSI_CTL0 &= ~TSI_CTL0_TSIS;
- }
- /*!
- \brief configure TSI triggering by hardware
- \param[in] trigger_edge: the edge type in hardware trigger mode
- only one parameter can be selected which is shown as below:
- \arg TSI_FALLING_TRIGGER: falling edge trigger TSI charge transfer sequence
- \arg TSI_RISING_TRIGGER: rising edge trigger TSI charge transfer sequence
- \param[out] none
- \retval none
- */
- void tsi_hardware_mode_config(uint8_t trigger_edge)
- {
- if(RESET == (TSI_CTL0 & TSI_CTL0_TSIS)){
- /*enable hardware mode*/
- TSI_CTL0 |= TSI_CTL0_TRGMOD;
- /*configure the edge type in hardware trigger mode*/
- if(TSI_FALLING_TRIGGER == trigger_edge){
- TSI_CTL0 &= ~TSI_CTL0_EGSEL;
- }else{
- TSI_CTL0 |= TSI_CTL0_EGSEL;
- }
- }
- }
- /*!
- \brief configure TSI pin mode when charge-transfer sequence is IDLE
- \param[in] pin_mode: pin mode when charge-transfer sequence is IDLE
- only one parameter can be selected which is shown as below:
- \arg TSI_OUTPUT_LOW: TSI pin will output low when IDLE
- \arg TSI_INPUT_FLOATING: TSI pin will keep input_floating when IDLE
- \param[out] none
- \retval none
- */
- void tsi_pin_mode_config(uint8_t pin_mode)
- {
- if(RESET == (TSI_CTL0 & TSI_CTL0_TSIS)){
- if(TSI_OUTPUT_LOW == pin_mode){
- TSI_CTL0 &= ~TSI_CTL0_PINMOD;
- }else{
- TSI_CTL0 |= TSI_CTL0_PINMOD;
- }
- }
- }
- /*!
- \brief configure extend charge state
- \param[in] extend: enable or disable extend charge state
- only one parameter can be selected which is shown as below:
- \arg ENABLE: enable extend charge state
- \arg DISABLE: disable extend charge state
- \param[in] prescaler: ECCLK clock division factor
- only one parameter can be selected which is shown as below:
- \arg TSI_EXTEND_DIV1: fECCLK = fHCLK
- \arg TSI_EXTEND_DIV2: fECCLK = fHCLK/2
- \arg TSI_EXTEND_DIV3: fECCLK = fHCLK/3
- \arg TSI_EXTEND_DIV4: fECCLK = fHCLK/4
- \arg TSI_EXTEND_DIV5: fECCLK = fHCLK/5
- \arg TSI_EXTEND_DIV6: fECCLK = fHCLK/6
- \arg TSI_EXTEND_DIV7: fECCLK = fHCLK/7
- \arg TSI_EXTEND_DIV8: fECCLK = fHCLK/8
- \param[in] max_duration: value range 1...128,extend charge state maximum duration time is 1*tECCLK~128*tECCLK
- \param[out] none
- \retval none
- */
- void tsi_extend_charge_config(ControlStatus extend,uint8_t prescaler,uint32_t max_duration)
- {
- uint32_t ctl0,ctl1;
- if(RESET == (TSI_CTL0 & TSI_CTL0_TSIS)){
- if(DISABLE == extend){
- /*disable extend charge state*/
- TSI_CTL0 &= ~TSI_CTL0_ECEN;
- }else{
- if(TSI_EXTEND_DIV3 > prescaler){
- /*configure extend charge state maximum duration time*/
- ctl0 = TSI_CTL0;
- ctl0 &= ~TSI_CTL0_ECDT;
- ctl0 |= TSI_EXTENDMAX((max_duration-1U));
- TSI_CTL0 = ctl0;
- /*configure ECCLK clock division factor*/
- ctl0 = TSI_CTL0;
- ctl0 &= ~TSI_CTL0_ECDIV;
- ctl0 |= (uint32_t)prescaler<<15U;
- TSI_CTL0 = ctl0;
- /*enable extend charge state*/
- TSI_CTL0 |= TSI_CTL0_ECEN;
- }else{
- /*configure extend charge state maximum duration time*/
- ctl0 = TSI_CTL0;
- ctl0 &= ~TSI_CTL0_ECDT;
- ctl0 |= TSI_EXTENDMAX((max_duration-1U));
- TSI_CTL0 = ctl0;
- /*configure ECCLK clock division factor*/
- ctl0 = TSI_CTL0;
- ctl0 &= ~TSI_CTL0_ECDIV;
- ctl0 |= (prescaler & 0x01U)<<15U;
- TSI_CTL0 = ctl0;
- ctl1 = TSI_CTL1;
- ctl1 &= ~TSI_CTL1_ECDIV;
- ctl1 |= (prescaler & 0x06U)<<28U;
- TSI_CTL1 = ctl1;
- /*enable extend charge state*/
- TSI_CTL0 |= TSI_CTL0_ECEN;
- }
- }
- }
- }
- /*!
- \brief configure charge plus and transfer plus
- \param[in] prescaler: CTCLK clock division factor
- only one parameter can be selected which is shown as below:
- \arg TSI_CTCDIV_DIV1: fCTCLK = fHCLK
- \arg TSI_CTCDIV_DIV2: fCTCLK = fHCLK/2
- \arg TSI_CTCDIV_DIV4: fCTCLK = fHCLK/4
- \arg TSI_CTCDIV_DIV8: fCTCLK = fHCLK/8
- \arg TSI_CTCDIV_DIV16: fCTCLK = fHCLK/16
- \arg TSI_CTCDIV_DIV32: fCTCLK = fHCLK/32
- \arg TSI_CTCDIV_DIV64: fCTCLK = fHCLK/64
- \arg TSI_CTCDIV_DIV128: fCTCLK = fHCLK/128
- \arg TSI_CTCDIV_DIV256: fCTCLK = fHCLK/256
- \arg TSI_CTCDIV_DIV512: fCTCLK = fHCLK/512
- \arg TSI_CTCDIV_DIV1024: fCTCLK = fHCLK/1024
- \arg TSI_CTCDIV_DIV2048: fCTCLK = fHCLK/2048
- \arg TSI_CTCDIV_DIV4096: fCTCLK = fHCLK/4096
- \arg TSI_CTCDIV_DIV8192: fCTCLK = fHCLK/8192
- \arg TSI_CTCDIV_DIV16384: fCTCLK = fHCLK/16384
- \arg TSI_CTCDIV_DIV32768: fCTCLK = fHCLK/32768
- \param[in] charge_duration: charge state duration time
- only one parameter can be selected which is shown as below:
- \arg TSI_CHARGE_xCTCLK(x=1..16): the duration time of charge state is x CTCLK
- \param[in] transfer_duration: charge transfer state duration time
- only one parameter can be selected which is shown as below:
- \arg TSI_TRANSFER_xCTCLK(x=1..16): the duration time of transfer state is x CTCLK
- \param[out] none
- \retval none
- */
- void tsi_plus_config(uint32_t prescaler,uint32_t charge_duration,uint32_t transfer_duration)
- {
- uint32_t ctl0,ctl1;
- if(RESET == (TSI_CTL0 & TSI_CTL0_TSIS)){
- if(TSI_CTCDIV_DIV256 > prescaler){
- /* config TSI_CTL0 */
- ctl0 = TSI_CTL0;
- /*configure TSI clock division factor,charge state duration time,charge transfer state duration time */
- ctl0 &= ~(TSI_CTL0_CTCDIV|TSI_CTL0_CTDT|TSI_CTL0_CDT);
- ctl0 |= ((prescaler<<12U)|charge_duration|transfer_duration);
- TSI_CTL0 = ctl0;
-
- /* config TSI_CTL1 */
- ctl1 = TSI_CTL1;
- ctl1 &= ~TSI_CTL1_CTCDIV;
- TSI_CTL1 = ctl1;
- }else{
- /* config TSI_CTL */
- ctl0 = TSI_CTL0;
- prescaler &= ~0x08U;
- /*configure TSI clock division factor,charge state duration time,charge transfer state duration time */
- ctl0 &= ~(TSI_CTL0_CTCDIV|TSI_CTL0_CTDT|TSI_CTL0_CDT);
- ctl0 |= ((prescaler<<12U)|charge_duration|transfer_duration);
- TSI_CTL0 = ctl0;
-
- /* config TSI_CTL2 */
- ctl1 = TSI_CTL1;
- ctl1 |= TSI_CTL1_CTCDIV;
- TSI_CTL1 = ctl1;
- }
- }
- }
- /*!
- \brief configure the max cycle number of a charge-transfer sequence
- \param[in] max_number: max cycle number
- only one parameter can be selected which is shown as below:
- \arg TSI_MAXNUM255: the max cycle number of a sequence is 255
- \arg TSI_MAXNUM511: the max cycle number of a sequence is 511
- \arg TSI_MAXNUM1023: the max cycle number of a sequence is 1023
- \arg TSI_MAXNUM2047: the max cycle number of a sequence is 2047
- \arg TSI_MAXNUM4095: the max cycle number of a sequence is 4095
- \arg TSI_MAXNUM8191: the max cycle number of a sequence is 8191
- \arg TSI_MAXNUM16383: the max cycle number of a sequence is 16383
- \param[out] none
- \retval none
- */
- void tsi_max_number_config(uint32_t max_number)
- {
- if(RESET == (TSI_CTL0 & TSI_CTL0_TSIS)){
- uint32_t maxnum;
- maxnum = TSI_CTL0;
- /*configure the max cycle number of a charge-transfer sequence*/
- maxnum &= ~TSI_CTL0_MCN;
- maxnum |= max_number;
- TSI_CTL0 = maxnum;
- }
- }
- /*!
- \brief switch on hysteresis pin
- \param[in] group_pin: select pin which will be switched on hysteresis
- one or more parameters can be selected which are shown as below:
- \arg TSI_PHM_GxPy(x=0..5,y=0..3): pin y of group x switch on hysteresis
- \param[out] none
- \retval none
- */
- void tsi_hysteresis_on(uint32_t group_pin)
- {
- TSI_PHM |= group_pin;
- }
- /*!
- \brief switch off hysteresis pin
- \param[in] group_pin: select pin which will be switched off hysteresis
- one or more parameters can be selected which are shown as below:
- \arg TSI_PHM_GxPy(x=0..5,y=0..3): pin y of group x switch off hysteresis
- \param[out] none
- \retval none
- */
- void tsi_hysteresis_off(uint32_t group_pin)
- {
- TSI_PHM &= ~group_pin;
- }
- /*!
- \brief switch on analog pin
- \param[in] group_pin: select pin which will be switched on analog
- one or more parameters can be selected which are shown as below:
- \arg TSI_ASW_GxPy(x=0..5,y=0..3):pin y of group x switch on analog
- \param[out] none
- \retval none
- */
- void tsi_analog_on(uint32_t group_pin)
- {
- TSI_ASW |= group_pin;
- }
- /*!
- \brief switch off analog pin
- \param[in] group_pin: select pin which will be switched off analog
- one or more parameters can be selected which are shown as below:
- \arg TSI_ASW_GxPy(x=0..5,y=0..3):pin y of group x switch off analog
- \param[out] none
- \retval none
- */
- void tsi_analog_off(uint32_t group_pin)
- {
- TSI_ASW &= ~group_pin;
- }
- /*!
- \brief enable TSI interrupt
- \param[in] source: select interrupt which will be enabled
- only one parameter can be selected which is shown as below:
- \arg TSI_INT_CCTCF: charge-transfer complete flag interrupt enable
- \arg TSI_INT_MNERR: max cycle number error interrupt enable
- \param[out] none
- \retval none
- */
- void tsi_interrupt_enable(uint32_t source)
- {
- TSI_INTEN |= source;
- }
- /*!
- \brief disable TSI interrupt
- \param[in] source: select interrupt which will be disabled
- only one parameter can be selected which is shown as below:
- \arg TSI_INT_CCTCF: charge-transfer complete flag interrupt disable
- \arg TSI_INT_MNERR: max cycle number error interrupt disable
- \param[out] none
- \retval none
- */
- void tsi_interrupt_disable(uint32_t source)
- {
- TSI_INTEN &= ~source;
- }
- /*!
- \brief clear TSI interrupt flag
- \param[in] flag: select flag which will be cleared
- only one parameter can be selected which is shown as below:
- \arg TSI_INT_FLAG_CTCF_CLR: clear charge-transfer complete flag
- \arg TSI_INT_FLAG_MNERR_CLR: clear max cycle number error
- \param[out] none
- \retval none
- */
- void tsi_interrupt_flag_clear(uint32_t flag)
- {
- TSI_INTC |= flag;
- }
- /*!
- \brief get TSI interrupt flag
- \param[in] flag:
- only one parameter can be selected which is shown as below:
- \arg TSI_INT_FLAG_CTCF: charge-transfer complete flag
- \arg TSI_INT_FLAG_MNERR: max Cycle Number Error
- \param[out] none
- \retval FlagStatus:SET or RESET
- */
- FlagStatus tsi_interrupt_flag_get(uint32_t flag)
- {
- uint32_t interrupt_enable = 0U,interrupt_flag = 0U;
- interrupt_flag = (TSI_INTF & flag);
- interrupt_enable = (TSI_INTEN & flag);
- if(interrupt_flag && interrupt_enable){
- return SET;
- }else{
- return RESET;
- }
- }
- /*!
- \brief clear flag
- \param[in] flag: select flag which will be cleared
- only one parameter can be selected which is shown as below:
- \arg TSI_FLAG_CTCF_CLR: clear charge-transfer complete flag
- \arg TSI_FLAG_MNERR_CLR: clear max cycle number error
- \param[out] none
- \retval none
- */
- void tsi_flag_clear(uint32_t flag)
- {
- TSI_INTC |= flag;
- }
- /*!
- \brief get flag
- \param[in] flag:
- only one parameter can be selected which is shown as below:
- \arg TSI_FLAG_CTCF: charge-transfer complete flag
- \arg TSI_FLAG_MNERR: max Cycle Number Error
- \param[out] none
- \retval FlagStatus:SET or RESET
- */
- FlagStatus tsi_flag_get(uint32_t flag)
- {
- FlagStatus flag_status;
- if(TSI_INTF & flag){
- flag_status = SET;
- }else{
- flag_status = RESET;
- }
- return flag_status;
- }
- /*!
- \brief enbale group
- \param[in] group: select group to be enabled
- one or more parameters can be selected which are shown as below:
- \arg TSI_GCTL_GEx(x=0..5): the x group will be enabled
- \param[out] none
- \retval none
- */
- void tsi_group_enable(uint32_t group)
- {
- TSI_GCTL |= group;
- }
- /*!
- \brief disbale group
- \param[in] group: select group to be disabled
- one or more parameters can be selected which are shown as below:
- \arg TSI_GCTL_GEx(x=0..5):the x group will be disabled
- \param[out] none
- \retval none
- */
- void tsi_group_disable(uint32_t group)
- {
- TSI_GCTL &= ~group;
- }
- /*!
- \brief get group complete status
- \param[in] group: select group
- one or more parameters can be selected which are shown as below:
- \arg TSI_GCTL_GCx(x=0..5): get the complete status of group x
- \param[out] none
- \retval FlagStatus: group complete status,SET or RESET
- */
- FlagStatus tsi_group_status_get(uint32_t group)
- {
- FlagStatus flag_status;
- if(TSI_GCTL & group){
- flag_status = SET;
- }else{
- flag_status = RESET;
- }
- return flag_status;
- }
- /*!
- \brief get the cycle number for group0 as soon as a charge-transfer sequence completes
- \param[in] none
- \param[out] none
- \retval group0 cycle number
- */
- uint16_t tsi_group0_cycle_get(void)
- {
- return (uint16_t)TSI_G0CYCN;
- }
- /*!
- \brief get the cycle number for group1 as soon as a charge-transfer sequence completes
- \param[in] none
- \param[out] none
- \retval group1 cycle number
- */
- uint16_t tsi_group1_cycle_get(void)
- {
- return (uint16_t)TSI_G1CYCN;
- }
- /*!
- \brief get the cycle number for group2 as soon as a charge-transfer sequence completes
- \param[in] none
- \param[out] none
- \retval group2 cycle number
- */
- uint16_t tsi_group2_cycle_get(void)
- {
- return (uint16_t)TSI_G2CYCN;
- }
- /*!
- \brief get the cycle number for group3 as soon as a charge-transfer sequence completes
- \param[in] none
- \param[out] none
- \retval group3 cycle number
- */
- uint16_t tsi_group3_cycle_get(void)
- {
- return (uint16_t)TSI_G3CYCN;
- }
- /*!
- \brief get the cycle number for group4 as soon as a charge-transfer sequence completes
- \param[in] none
- \param[out] none
- \retval group4 cycle number
- */
- uint16_t tsi_group4_cycle_get(void)
- {
- return (uint16_t)TSI_G4CYCN;
- }
- /*!
- \brief get the cycle number for group5 as soon as a charge-transfer sequence completes
- \param[in] none
- \param[out] none
- \retval group5 cycle number
- */
- uint16_t tsi_group5_cycle_get(void)
- {
- return (uint16_t)TSI_G5CYCN;
- }
|