Advertisement
gamerGracz

mikrokontrolerADC

Apr 15th, 2025
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.89 KB | Source Code | 0 0
  1. /**
  2.  * main.c
  3.  */
  4.  
  5. #define ZAD1
  6.  
  7. #ifdef ZAD1
  8. #include "DSP28x_Project.h"
  9. __interrupt void adc_isr(void);
  10.  
  11. unsigned int ADCresult=0;
  12. unsigned int ADCcounter=0;
  13.  
  14. void configureADC(){
  15.     InitAdc();
  16.     EALLOW;
  17.     SysCtrlRegs.HISPCP.bit.HSPCLK = 3; //150MHz/6 = 25MHz
  18.     AdcRegs.ADCTRL3.bit.ADCCLKPS=2; // hspclk/(4* adctrl + cps) => 6.25 MHz
  19.     AdcRegs.ADCTRL1.bit.CPS=0;
  20.  
  21.     AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;
  22.  
  23.     AdcRegs.ADCTRL1.bit.CONT_RUN=1; //should it run without stopping
  24.     AdcRegs.ADCTRL1.bit.SEQ_OVRD=1; //wrapping around or overriding sequence set by max conv, works only in continous mode
  25.  
  26.     AdcRegs.ADCMAXCONV.all = 15; //always there is all + 1 channels conversed
  27.    
  28.     AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;
  29.  
  30.     AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 1; //adcina1 = vr2
  31.  
  32.     AdcRegs.ADCTRL1.bit.ACQ_PS=15; //aquistion time 16 adc cycles
  33.    
  34.     //AdcRegs.ADCTRL2.bit.SOC_SEQ1=1; //Wyzwalanie programowe możliwe jest poprzez ustawienie odpowiedniego bitu w rejestrze;
  35.  
  36.     EDIS;
  37. }
  38.  
  39. void setupInterrupts(){
  40.     DINT;
  41.     InitPieCtrl();
  42.     IER = 0x0000;
  43.     IFR = 0x0000;
  44.     InitPieVectTable();
  45.     EALLOW;
  46.     PieVectTable.XINT1 = &adc_isr;
  47.     EDIS;
  48.     PieCtrlRegs.PIECTRL.bit.ENPIE=1;       //wlacza modul przerwan
  49.     PieCtrlRegs.PIEIER1.bit.INTx1 = 1; // SEQ1 INT interrupt
  50.     IER|=M_INT1;
  51.     EINT;
  52.     ERTM;
  53. }
  54. int main(void)
  55. {
  56.     InitSysCtrl();
  57.  
  58.     setupInterrupts();
  59.     configureADC();
  60.     while(1){
  61.         __asm(" NOP");
  62.         DELAY_US(XXXX);
  63.         counter++;
  64.         AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;      // uruchamia konwersje ADC z SEQ1
  65.     }
  66. }
  67.  
  68. __interrupt void adc_isr(void)
  69. {
  70.     ADCcounter++;
  71.     ADCresult=AdcMirror.ADCRESULT15;
  72.     AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;      // Reset SEQ1
  73.     AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;    // Clear INT SEQ1 bit
  74.     PieCtrlRegs.PIEACK.all = 1;            // Acknowledge interrupt to PIE
  75. }
  76.  
  77. #endif
  78.  
  79.  
  80.  
  81. #ifdef ZAD2
  82. #include "DSP28x_Project.h"
  83. __interrupt void adc_isr(void);
  84.  
  85. unsigned int ADCresult=0;
  86. unsigned int ADCcounter=0;
  87.  
  88. void ledSetup(){
  89.     EALLOW;
  90.  
  91.     GpioCtrlRegs.GPAMUX1.bit.GPIO9=0x00;
  92.     GpioCtrlRegs.GPADIR.bit.GPIO9=1;
  93.     GpioCtrlRegs.GPAPUD.bit.GPIO9=1;
  94.  
  95.     GpioCtrlRegs.GPAMUX1.bit.GPIO11=0x00;
  96.     GpioCtrlRegs.GPADIR.bit.GPIO11=1;
  97.     GpioCtrlRegs.GPAPUD.bit.GPIO11=1;
  98.  
  99.     GpioCtrlRegs.GPBMUX1.bit.GPIO34=0x00;
  100.     GpioCtrlRegs.GPBDIR.bit.GPIO34=1;
  101.     GpioCtrlRegs.GPBPUD.bit.GPIO34=1;
  102.  
  103.     GpioCtrlRegs.GPBMUX1.bit.GPIO49=0x00;
  104.     GpioCtrlRegs.GPBDIR.bit.GPIO49=1;
  105.     GpioCtrlRegs.GPBPUD.bit.GPIO49=1;
  106.  
  107.     EDIS;
  108. }
  109.  
  110. void configureADC(){
  111.     InitAdc();
  112.     EALLOW;
  113.     SysCtrlRegs.HISPCP.bit.HSPCLK = 3; //150MHz/6 = 25MHz
  114.     AdcRegs.ADCTRL3.bit.ADCCLKPS=2; // hspclk/(4* adctrl + cps) => 6.25 MHz
  115.     AdcRegs.ADCTRL1.bit.CPS=0;
  116.  
  117.     AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;
  118.  
  119.     AdcRegs.ADCTRL1.bit.CONT_RUN=1; //should it run without stopping
  120.     AdcRegs.ADCTRL1.bit.SEQ_OVRD=1; //wrapping around or overriding sequence set by max conv, works only in continous mode
  121.  
  122.     AdcRegs.ADCMAXCONV.all = 15; //always there is all + 1 channels conversed
  123.    
  124.     AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;
  125.  
  126.     AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 1; //adcina1 = vr2
  127.  
  128.     AdcRegs.ADCTRL1.bit.ACQ_PS=15; //aquistion time 16 adc cycles
  129.    
  130.     //AdcRegs.ADCTRL2.bit.SOC_SEQ1=1; //Wyzwalanie programowe możliwe jest poprzez ustawienie odpowiedniego bitu w rejestrze;
  131.  
  132.     EDIS;
  133. }
  134.  
  135. void setupInterrupts(){
  136.     DINT;
  137.     InitPieCtrl();
  138.     IER = 0x0000;
  139.     IFR = 0x0000;
  140.     InitPieVectTable();
  141.     EALLOW;
  142.     PieVectTable.XINT1 = &adc_isr;
  143.     EDIS;
  144.     PieCtrlRegs.PIECTRL.bit.ENPIE=1;       //wlacza modul przerwan
  145.     PieCtrlRegs.PIEIER1.bit.INTx1 = 1; // SEQ1 INT interrupt
  146.     IER|=M_INT1;
  147.     EINT;
  148.     ERTM;
  149. }
  150. int main(void)
  151. {
  152.     InitSysCtrl();
  153.  
  154.     ledSetup();
  155.     setupInterrupts();
  156.     configureADC();
  157.     while(1){
  158.         __asm(" NOP");
  159.         DELAY_US(XXXX);
  160.         counter++;
  161.         AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;      // uruchamia konwersje ADC z SEQ1
  162.     }
  163. }
  164.  
  165. __interrupt void adc_isr(void)
  166. {
  167.     ADCcounter++;
  168.  
  169.     ADCresult=AdcMirror.ADCRESULT15;
  170.  
  171.     if(ADCresult < (4096/5)) {
  172.         GPACLEAR.bit.GPIO9 = 1;
  173.         GPACLEAR.bit.GPIO11 = 1;
  174.  
  175.         GPBCLEAR.bit.GPIO34 = 1;
  176.         GPBCLEAR.bit.GPIO49 = 1;
  177.     }
  178.  
  179.     else if(ADCresult < (4096/5)*2) {
  180.         GPASET.bit.GPIO9 = 1;
  181.         GPACLEAR.bit.GPIO11 = 1;
  182.  
  183.         GPBCLEAR.bit.GPIO34 = 1;
  184.         GPBCLEAR.bit.GPIO49 = 1;
  185.     }
  186.  
  187.     else if(ADCresult < (4096/5)*3) {
  188.         GPASET.bit.GPIO9 = 1;
  189.         GPASET.bit.GPIO11 = 1;
  190.  
  191.         GPBCLEAR.bit.GPIO34 = 1;
  192.         GPBCLEAR.bit.GPIO49 = 1;
  193.     }
  194.  
  195.     else if(ADCresult < (4096/5)*4) {
  196.         GPASET.bit.GPIO9 = 1;
  197.         GPASET.bit.GPIO11 = 1;
  198.  
  199.         GPBSET.bit.GPIO34 = 1;
  200.         GPBCLEAR.bit.GPIO49 = 1;
  201.     }
  202.  
  203.     else {
  204.         GPASET.bit.GPIO9 = 1;
  205.         GPASET.bit.GPIO11 = 1;
  206.  
  207.         GPBSET.bit.GPIO34 = 1;
  208.         GPBSET.bit.GPIO49 = 1;
  209.     }
  210.    
  211.    
  212.    
  213.     AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;      // Reset SEQ1
  214.     AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;    // Clear INT SEQ1 bit
  215.     PieCtrlRegs.PIEACK.all = 1;            // Acknowledge interrupt to PIE
  216. }
  217.  
  218. #endif
  219.  
  220. #ifdef ZAD3
  221.  
  222.  
  223. #include "DSP28x_Project.h"
  224. __interrupt void adc_isr(void);
  225. __interrupt void Timer0_ISR();
  226.  
  227. unsigned int ADCresult=0;
  228. unsigned int ADCcounter=0;
  229.  
  230.  
  231. void setupTimer0(){
  232.     CpuTimer0Regs.TCR.bit.TSS=1;
  233.  
  234.     CpuTimer0Regs.TPRH.bit.TDDRH=0xFF;
  235.     CpuTimer0Regs.TPR.bit.TDDR=0xFF;
  236.     CpuTimer0Regs.PRD.all=229;
  237.  
  238.     CpuTimer0Regs.TCR.bit.TIE=1;
  239.     CpuTimer0Regs.TCR.bit.TRB=1;
  240.     CpuTimer0Regs.TCR.bit.TSS=0;
  241. }
  242.  
  243. void ledSetup(){
  244.     EALLOW;
  245.  
  246.     GpioCtrlRegs.GPAMUX1.bit.GPIO9=0x00;
  247.     GpioCtrlRegs.GPADIR.bit.GPIO9=1;
  248.     GpioCtrlRegs.GPAPUD.bit.GPIO9=1;
  249.  
  250.     GpioCtrlRegs.GPAMUX1.bit.GPIO11=0x00;
  251.     GpioCtrlRegs.GPADIR.bit.GPIO11=1;
  252.     GpioCtrlRegs.GPAPUD.bit.GPIO11=1;
  253.  
  254.     GpioCtrlRegs.GPBMUX1.bit.GPIO34=0x00;
  255.     GpioCtrlRegs.GPBDIR.bit.GPIO34=1;
  256.     GpioCtrlRegs.GPBPUD.bit.GPIO34=1;
  257.  
  258.     GpioCtrlRegs.GPBMUX1.bit.GPIO49=0x00;
  259.     GpioCtrlRegs.GPBDIR.bit.GPIO49=1;
  260.     GpioCtrlRegs.GPBPUD.bit.GPIO49=1;
  261.  
  262.     EDIS;
  263. }
  264.  
  265. void configureADC(){
  266.     InitAdc();
  267.     EALLOW;
  268.     SysCtrlRegs.HISPCP.bit.HSPCLK = 3; //150MHz/6 = 25MHz
  269.     AdcRegs.ADCTRL3.bit.ADCCLKPS=2; // hspclk/(4* adctrl + cps) => 6.25 MHz
  270.     AdcRegs.ADCTRL1.bit.CPS=0;
  271.  
  272.     AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;
  273.  
  274.     AdcRegs.ADCTRL1.bit.CONT_RUN=1; //should it run without stopping
  275.     AdcRegs.ADCTRL1.bit.SEQ_OVRD=1; //wrapping around or overriding sequence set by max conv, works only in continous mode
  276.  
  277.     AdcRegs.ADCMAXCONV.all = 15; //always there is all + 1 channels conversed
  278.    
  279.     AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;
  280.  
  281.     AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 1; //adcina1 = vr2
  282.  
  283.     AdcRegs.ADCTRL1.bit.ACQ_PS=15; //aquistion time 16 adc cycles
  284.    
  285.     //AdcRegs.ADCTRL2.bit.SOC_SEQ1=1; //Wyzwalanie programowe możliwe jest poprzez ustawienie odpowiedniego bitu w rejestrze;
  286.  
  287.     EDIS;
  288. }
  289.  
  290. void setupInterrupts(){
  291.     DINT;
  292.     InitPieCtrl();
  293.     IER = 0x0000;
  294.     IFR = 0x0000;
  295.     InitPieVectTable();
  296.    
  297.     EALLOW;
  298.     PieVectTable.XINT1 = &adc_isr;
  299.     PieVectTable.TINT0=&Timer0_ISR;
  300.     EDIS;
  301.  
  302.     PieCtrlRegs.PIECTRL.bit.ENPIE=1;       //wlacza modul przerwan
  303.     PieCtrlRegs.PIEIER1.bit.INTx1 = 1; // SEQ1 INT interrupt
  304.  
  305.     PieCtrlRegs.PIEIER1.bit.INTx7=1; // Timer0 TINT0
  306.    
  307.  
  308.     IER|=M_INT1;
  309.     EINT;
  310.     ERTM;
  311. }
  312. int main(void)
  313. {
  314.     InitSysCtrl();
  315.  
  316.     ledSetup();
  317.     configureADC();
  318.     setupTimer0();
  319.     setupInterrupts();
  320. }
  321.  
  322. __interrupt void adc_isr(void)
  323. {
  324.     ADCcounter++;
  325.  
  326.     ADCresult=AdcMirror.ADCRESULT15;
  327.  
  328.     if(ADCresult < (4096/5)) {
  329.         GPACLEAR.bit.GPIO9 = 1;
  330.         GPACLEAR.bit.GPIO11 = 1;
  331.  
  332.         GPBCLEAR.bit.GPIO34 = 1;
  333.         GPBCLEAR.bit.GPIO49 = 1;
  334.     }
  335.  
  336.     else if(ADCresult < (4096/5)*2) {
  337.         GPASET.bit.GPIO9 = 1;
  338.         GPACLEAR.bit.GPIO11 = 1;
  339.  
  340.         GPBCLEAR.bit.GPIO34 = 1;
  341.         GPBCLEAR.bit.GPIO49 = 1;
  342.     }
  343.  
  344.     else if(ADCresult < (4096/5)*3) {
  345.         GPASET.bit.GPIO9 = 1;
  346.         GPASET.bit.GPIO11 = 1;
  347.  
  348.         GPBCLEAR.bit.GPIO34 = 1;
  349.         GPBCLEAR.bit.GPIO49 = 1;
  350.     }
  351.  
  352.     else if(ADCresult < (4096/5)*4) {
  353.         GPASET.bit.GPIO9 = 1;
  354.         GPASET.bit.GPIO11 = 1;
  355.  
  356.         GPBSET.bit.GPIO34 = 1;
  357.         GPBCLEAR.bit.GPIO49 = 1;
  358.     }
  359.  
  360.     else {
  361.         GPASET.bit.GPIO9 = 1;
  362.         GPASET.bit.GPIO11 = 1;
  363.  
  364.         GPBSET.bit.GPIO34 = 1;
  365.         GPBSET.bit.GPIO49 = 1;
  366.     }
  367.    
  368.    
  369.    
  370.     AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;      // Reset SEQ1
  371.     AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;    // Clear INT SEQ1 bit
  372.     PieCtrlRegs.PIEACK.all = 1;            // Acknowledge interrupt to PIE
  373. }
  374.  
  375.  
  376. __interrupt void Timer0_ISR(){
  377.  
  378.     counter++;
  379.     AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
  380.  
  381.     PieCtrlRegs.PIEACK.bit.ACK1=1;
  382. }
  383.  
  384.  
  385. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement