00001
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 #include <avr32/io.h>
00048 #include "compiler.h"
00049 #include "acifa.h"
00050
00051 int acifa_is_aca_ready(volatile avr32_acifa_t *acifa)
00052 {
00053 return (acifa->sr & AVR32_ACIFA_SR_ACARDY_MASK) != 0;
00054 }
00055
00056 int acifa_is_acb_ready(volatile avr32_acifa_t *acifa)
00057 {
00058 return (acifa->sr & AVR32_ACIFA_SR_ACBRDY_MASK) != 0;
00059 }
00060
00061 int acifa_is_wf_ready(volatile avr32_acifa_t *acifa)
00062 {
00063 return (acifa->sr & AVR32_ACIFA_SR_WFRDY_MASK) != 0;
00064 }
00065
00066 void acifa_configure(volatile avr32_acifa_t * acifa,
00067 U8 comp_sel,
00068 U8 input_p,
00069 U8 input_n,
00070 U32 pb_hz)
00071 {
00072 Assert( acifa!=NULL );
00073 if (comp_sel == ACIFA_COMP_SELA)
00074 {
00075 acifa->confa = ((input_p << AVR32_ACIFA_CONFA_INSELP_OFFSET)&AVR32_ACIFA_CONFA_INSELP_MASK) |
00076 ((input_n << AVR32_ACIFA_CONFA_INSELN_OFFSET)&AVR32_ACIFA_CONFA_INSELN_MASK) ;
00077 }
00078 else
00079 {
00080 acifa->confb = ((input_p << AVR32_ACIFA_CONFB_INSELP_OFFSET)&AVR32_ACIFA_CONFB_INSELP_MASK) |
00081 ((input_n << AVR32_ACIFA_CONFB_INSELN_OFFSET)&AVR32_ACIFA_CONFB_INSELN_MASK) ;
00082 }
00083
00084 acifa->sut = (pb_hz/100000);
00085 }
00086
00087 void acifa_configure_window( volatile avr32_acifa_t * acifa,
00088 U8 input_p,
00089 U8 input_n,
00090 U8 common_input,
00091 U32 pb_hz)
00092 {
00093 Assert( acifa!=NULL );
00094
00095 acifa->wconf |= ((common_input << AVR32_ACIFA_WCONF_WINSEL_OFFSET)&AVR32_ACIFA_WCONF_WINSEL_MASK);
00096 acifa->confa = ((input_p << AVR32_ACIFA_CONFA_INSELP_OFFSET)&AVR32_ACIFA_CONFA_INSELP_MASK) ;
00097 acifa->confb = ((input_n << AVR32_ACIFA_CONFB_INSELN_OFFSET)&AVR32_ACIFA_CONFB_INSELN_MASK) ;
00098
00099 acifa->sut = (pb_hz/100000);
00100 }
00101
00102 void acifa_enable_output(volatile avr32_acifa_t * acifa,
00103 U8 comp_sel)
00104 {
00105 if (comp_sel == ACIFA_COMP_SELA)
00106 {
00107 acifa->confa |= AVR32_ACIFA_CONFA_OEN_MASK;
00108 }
00109 else
00110 {
00111 acifa->confb |= AVR32_ACIFA_CONFB_OEN_MASK;
00112 }
00113 }
00114
00115 void acifa_configure_hysteresis(volatile avr32_acifa_t * acifa,
00116 U8 comp_sel,
00117 U8 level)
00118 {
00119 Assert( acifa!=NULL );
00120
00121
00122 if (comp_sel == ACIFA_COMP_SELA)
00123 {
00124 acifa->confa |= ((level << AVR32_ACIFA_CONFA_HS_OFFSET)& AVR32_ACIFA_CONFA_HS_MASK);
00125 }
00126 else
00127 {
00128 acifa->confb |= ((level << AVR32_ACIFA_CONFB_HS_OFFSET)& AVR32_ACIFA_CONFB_HS_MASK);
00129 }
00130 }
00131
00132 void acifa_configure_vccscale(volatile avr32_acifa_t * acifa,
00133 U8 vcc_sel,
00134 U8 scale)
00135 {
00136 Assert( acifa!=NULL );
00137
00138
00139 if (vcc_sel == ACIFA_VCCSCALE_SELA)
00140 {
00141 acifa->scfa |= ((scale << AVR32_ACIFA_SCFA_SCALEFACTOR_OFFSET)& AVR32_ACIFA_SCFA_SCALEFACTOR_MASK)|AVR32_ACIFA_SCFA_EN_MASK;
00142 }
00143 else
00144 {
00145 acifa->scfb |= ((scale << AVR32_ACIFA_SCFB_SCALEFACTOR_OFFSET)& AVR32_ACIFA_SCFB_SCALEFACTOR_MASK)|AVR32_ACIFA_SCFB_EN_MASK;
00146 }
00147 }
00148
00149 void acifa_start(volatile avr32_acifa_t * acifa,
00150 U8 comp_sel)
00151 {
00152 Assert( acifa!=NULL );
00153
00154 if (comp_sel == ACIFA_COMP_SELA)
00155 {
00156 acifa->en = (AVR32_ACIFA_EN_ACAEN_MASK) | (AVR32_ACIFA_EN_ACACPEN_MASK);
00157 while(!acifa_is_aca_ready(acifa));
00158 }
00159 else if (comp_sel == ACIFA_COMP_SELB)
00160 {
00161 acifa->en = (AVR32_ACIFA_EN_ACBEN_MASK) | (AVR32_ACIFA_EN_ACBCPEN_MASK);
00162 while(!acifa_is_acb_ready(acifa));
00163 }
00164 else
00165 {
00166 acifa->en = (AVR32_ACIFA_EN_ACAEN_MASK) | (AVR32_ACIFA_EN_ACACPEN_MASK)| (AVR32_ACIFA_EN_ACBEN_MASK) | (AVR32_ACIFA_EN_ACBCPEN_MASK);
00167 while(!acifa_is_aca_ready(acifa));
00168 while(!acifa_is_acb_ready(acifa));
00169 }
00170 }
00171
00172 void acifa_start_window(volatile avr32_acifa_t * acifa)
00173 {
00174 acifa->en = (AVR32_ACIFA_EN_WFEN_MASK);
00175 while(!acifa_is_wf_ready(acifa));
00176 }
00177
00178 int acifa_is_aca_inp_higher(volatile avr32_acifa_t *acifa)
00179 {
00180 return (acifa->sr & AVR32_ACIFA_SR_ACACS_MASK) != 0;
00181 }
00182
00183 int acifa_is_acb_inp_higher(volatile avr32_acifa_t *acifa)
00184 {
00185 return (acifa->sr & AVR32_ACIFA_SR_ACBCS_MASK) != 0;
00186 }
00187
00188 int acifa_is_ci_inside_window(volatile avr32_acifa_t *acifa)
00189 {
00190 return (acifa->sr & AVR32_ACIFA_SR_WFCS_MASK) != 0;
00191 }