Modified some modules to work with the new generator
[cerebrum.git] / avr / simple-io.c.tp
blobc6d607622f3f621acecc7837ae3b429a56a6cc96
1 /*
2  Copyright (C) 2012 jaseg <s@jaseg.de>
4  This program is free software; you can redistribute it and/or
5  modify it under the terms of the GNU General Public License
6  version 3 as published by the Free Software Foundation.
7  */
9 #include <avr/io.h>
11 void ${init_function()} (void){
12 % if device["pwm"].get(member["port"]+str(member["pin"])):
13         ${device["pwm"].get(member["port"]+str(member["pin"]))[1]}
14 % endif
15 % if device["adc"].get(member["port"]+str(member["pin"])):
16         ADMUX |= REFS0 | ADLAR;
17         ADCSRA |= ADEN | device["adc"]["prescaler_bits"];
18 % endif
21 //${modulevar("state", None, "B", callbacks=(True, True))}
22 void callback_set_${modulevar("state")} (uint16_t payload_offset, uint16_t argsize, uint8_t* args){
23         PORT${member["port"]} &= ~(1<<${member["pin"]});
24         if(args[0])
25                 PORT${member["port"]} |= (1<<${member["pin"]});
26         uart_putc(0x00);
27         uart_putc(0x00);
30 void callback_get_${modulevar("state")} (uint16_t payload_offset, uint16_t argsize, uint8_t* args){
31         uart_putc(0x00);
32         uart_putc(0x01);
33         uart_putc(!!(PIN${member["port"]} & (1<<${member["pin"]})));
36 //${modulevar("direction", None, "B", callbacks=(True, True))}
37 void callback_set_${modulevar("direction")} (uint16_t payload_offset, uint16_t argsize, uint8_t* args){
38         DDR${member["port"]} &= ~(1<<${member["pin"]});
39         if(args[0])
40                 DDR${member["port"]} |= (1<<${member["pin"]});
41         uart_putc(0x00);
42         uart_putc(0x00);
45 void callback_get_${modulevar("direction")} (uint16_t payload_offset, uint16_t argsize, uint8_t* args){
46         uart_putc(0x00);
47         uart_putc(0x01);
48         uart_putc(!!(DDR${member["port"]} & (1<<${member["pin"]})));
51 % if device["adc"].get(member["port"]+str(member["pin"])):
52 //${modulevar("analog", None, "B", callbacks=(True, True))}
53 void callback_get_${modulevar("analog")} (uint16_t payload_offset, uint16_t argsize, uint8_t* args){
54         uart_putc(0x00);
55         uart_putc(0x01);
56 #if defined(__AVR_ATmega48__) ||defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega48P__) || defined(__AVR_ATmega88P__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328P__)
57         ADMUX &= 0xF0;
58         ADMUX |= ${device["adc"].get(member["port"]+str(member["pin"]))};
59 #elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega1280__)  || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega640__)
60         ADMUX &= 0xE0;
61         ADCSRB &= 0xF7;
62         ADMUX |= ${device["adc"].get(member["port"]+str(member["pin"]))}&0x1F;
63         ADCSRB |= ${device["adc"].get(member["port"]+str(member["pin"]))}&0x20>>2;
64 #endif
65         while(!(ADCSRA&(1<<ADIF))); //wait for conversion to finish
66         putc_escaped(ADCH);
67         ADCSRA |= (1<<ADIF); //reset the interrupt flag
69 % endif
71 % if device["pwm"].get(member["port"]+str(member["pin"])):
72 //${modulevar("pwm", None, "B", callbacks=(True, True))}
73 void callback_set_${modulevar("pwm")} (uint16_t payload_offset, uint16_t argsize, uint8_t* args){
74         OCR${device["pwm"].get(member["port"]+str(member["pin"]))[0]} = args[0];
75         uart_putc(0x00);
76         uart_putc(0x00);
79 void callback_get_${modulevar("pwm")} (uint16_t payload_offset, uint16_t argsize, uint8_t* args){
80         uart_putc(0x00);
81         uart_putc(0x01);
82         putc_escaped(OCR${device["pwm"].get(member["port"]+str(member["pin"]))[0]});
84 % endif