Advertisement
mikolajmki

systemy_na4

Jan 27th, 2023
1,729
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.51 KB | None | 0 0
  1. #include <targets\AT91SAM7.h>
  2. #include "pcf8833u8_lcd.h"
  3. #include <ctl_api.h>
  4. #include <stdio.h>
  5.  
  6. char b[4] = {0};
  7. int p = 0;
  8.  
  9. void wyswietl(char b) {
  10. //    sprintf("%.f", 12);
  11.     ADC_CR = 1<<1;  // lub ADC_CR_START; // start konwersji na aktywnych kanałach
  12.     while ((ADC_SR & ADC_SR_EOC5) == 0) {}  // dopóki flaga EOC6 jest rowna 0 (konwersja na kanale 6 nie zakończona - rób nic)
  13.     sprintf(b, "%d.%d", 20+((ADC_CDR5-530)/5), ADC_CDR5 % 10);// wykonaj akcję przypisaną do konwersji
  14.     LCDPutStr(b, 55,50,LARGE,WHITE,BLACK);
  15. }
  16.  
  17. void TIMER0_ISR () {
  18. //    wyswietl(b);//zmiana stanu LCD_BL
  19.     p = ADC_CDR5;
  20.     ADC_CR = 1<<1;  // lub ADC_CR_START; // start konwersji na aktywnych kanałach
  21.     while ((ADC_SR & ADC_SR_EOC5) == 0) {}  // dopóki flaga EOC6 jest rowna 0 (konwersja na kanale 6 nie zakończona - rób nic)
  22.     sprintf(b, "%d.%d", 20+((ADC_CDR5-530)/5), ADC_CDR5 % 10);// wykonaj akcję przypisaną do konwersji
  23.     LCDPutStr(b, 55,50,LARGE,WHITE,BLACK);
  24.     TC0_SR;   // na początku pusty odczyt rejestru statusu - kasowanie flagi przerwania CPCS
  25. }
  26.  
  27. void TIMER0_ISR1 () {
  28.     TC0_CCR ^= (1<<0) | (0<<1) | (1<<2);
  29.     PIOB_ISR;
  30. }
  31.  
  32.  
  33. int pomiar(){
  34.                 // w rejestrze ADC_MR możliwe również ustawienia niższej rozdzielczości
  35.  
  36.   return ADC_CDR5;
  37. }
  38.  
  39. int main(void){
  40.  
  41.   char b[7];
  42.  
  43.   InitLCD();  
  44.   LCDClearScreen();
  45.   Backlight(BL_ON);
  46.  
  47.   ctl_global_interrupts_disable();
  48.  
  49.   PMC_PCER|=(1<<3) | (1<<12) | (1<<17); // Power management controller (s. 30 datasheet);
  50.   PIOB_OER = (1<<20);
  51.   PIOB_OWER = (1<<20);
  52.   TC0_CCR = (1<<1);
  53.   TC0_SR;
  54.   TC0_CMR = (1<<2) | (1<<14);
  55.   TC0_CCR = (1<<0) | (1<<2);
  56.   TC0_IER= (1<<4);
  57.   TC0_RC = 9400;
  58.   PIOB_IER = (1<<3);
  59.  
  60.   // konfiguracja ADC, konwersja wartości napięcia z kanału 3 przetwornika:
  61.   ADC_CR = 1 << 0;  // lub ADC_CR_SWRST – to inny zapis tego samego – reset przetwornika
  62.   ADC_CHER = 1 << 5;    // aktywowanie kanałów na których ma być przeprowadzona konwersja
  63.   ADC_IDR = 0xFFFFF;    // świadomie wyłączamy przerwania od wszystkich zdarzeń(źródeł) z ADC
  64.   ADC_MR = (23<<ADC_MR_PRESCAL_BIT) | (2<<ADC_MR_STARTUP_BIT) | (1<<ADC_MR_SHTIM_BIT);
  65.  
  66.   ctl_unmask_isr(3);
  67.   ctl_set_isr(12,1,CTL_ISR_TRIGGER_FIXED,TIMER0_ISR,0);
  68.   ctl_set_isr(3,2,CTL_ISR_TRIGGER_FIXED,TIMER0_ISR1,0);
  69.   ctl_unmask_isr(12);
  70.   ctl_global_interrupts_enable();
  71.  
  72.   while(1){
  73. //    sprintf(b, "%d.%d", 20+((pomiar()-530)/5), pomiar() % 10);// wykonaj akcję przypisaną do konwersji
  74. //    LCDPutStr(b,55,50,LARGE,WHITE,BLACK);
  75.   }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement