Handreichung TI3

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 
00003 
00004 DigitalOut alarm(PC_0);
00005 DigitalOut anzeige(PC_1);
00006 InterruptIn flamme(PA_8);
00007 AnalogIn batterie(PA_0);
00008 DigitalIn test(PA_1);
00009 
00010 bool alarmAktiv=false;
00011 
00012 void isrFlamme(void)
00013 {
00014    alarmAktiv=true;
00015    alarm=1;
00016    anzeige=1;
00017 }
00018 
00019 void warte(unsigned int ms)
00020 {
00021     RCC->APB1ENR |= 0b100000; //TIM6
00022     TIM7->PSC=31999; //Prescaler für 1 ms
00023     TIM7->CNT=0;
00024     TIM7->ARR=ms;
00025     TIM7->SR=0;     //UIF=0
00026     TIM7->CR1=1; 
00027     while (TIM7->SR==0);
00028     TIM7->CR1=0;   
00029 }
00030 
00031 void TIM6_IRQHandler(void)
00032 {
00033     if (anzeige==0) 
00034     {
00035         anzeige=1;
00036         TIM6->ARR=1000; //1Sekunde
00037         if (batterie<0.7) alarm=1;
00038     }
00039     else
00040     {
00041         anzeige=0;
00042         TIM6->ARR=10000; //10Sekunde
00043         if (!alarmAktiv) alarm=0;
00044     }
00045     
00046     TIM6->SR=0;
00047     HAL_NVIC_ClearPendingIRQ(TIM6_IRQn);
00048 }
00049 
00050 void flammeinit(void)
00051 {
00052 flamme.rise(&isrFlamme);
00053 }
00054 
00055 void NVIC_Init(void)
00056 {
00057     /* TIM6_IRQn interrupt configuration */
00058     NVIC_SetVector(TIM6_IRQn, (uint32_t)&TIM6_IRQHandler);
00059     HAL_NVIC_EnableIRQ(TIM6_IRQn);
00060 }
00061 
00062 /* TIM6 init function */
00063 void TIM6_Init(void)
00064 {
00065     RCC->APB1ENR|=0b10000;  //Clock Enable
00066     TIM6->PSC=31999;         //Prescaler 100µs
00067     TIM6->ARR=1000;         //Autoreload 1000*1ms = 1s
00068     TIM6->DIER=1;           //UIE = 1 (Update Interrupt Enable)
00069     TIM6->SR=0;             //UIF =0 (Update Interrupt Flag)
00070     TIM6->CR1=1;            //CEN=1 (Counter Enable)
00071 }
00072 
00073 
00074 int main()
00075 {
00076     TIM6_Init();
00077 
00078     flammeinit();
00079     NVIC_Init();
00080     test.mode(PullDown);
00081     while(1) {
00082         if (test==1)
00083         {            
00084             warte(3000);
00085             if (test==1)
00086             {
00087                 TIM6->CR1=0;
00088                 alarm=1;
00089                 anzeige=1;
00090                 warte(1000);
00091                 alarm=0;
00092                 anzeige=0;
00093                 TIM6->CR1=1;
00094             }
00095         }
00096     }
00097 
00098 }