Rev 1393 | Rev 1425 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 1393 | Rev 1418 | ||
|---|---|---|---|
| Line 76... | Line 76... | ||
| 76 | gpio_set_out(EXP_C); |
76 | gpio_set_out(EXP_C); |
| 77 | #endif |
77 | #endif |
| 78 | 78 | ||
| 79 | /* set up counter mode for timer 1 */ |
79 | /* set up counter mode for timer 1 */ |
| 80 | #if act_hwPWM_CH1_COM>0 || act_hwPWM_CH2_COM>0 |
80 | #if act_hwPWM_CH1_COM>0 || act_hwPWM_CH2_COM>0 |
| - | 81 | if (pwmValue[0]>0) |
|
| - | 82 | { |
|
| 81 | TCCR1A|=(act_hwPWM_CH1_COM<<COM1B0 |
83 | TCCR1A|=(act_hwPWM_CH1_COM<<COM1B0); |
| - | 84 | } |
|
| - | 85 | if (pwmValue[1]>0) |
|
| - | 86 | { |
|
| - | 87 | TCCR1A|=(act_hwPWM_CH2_COM<<COM1A0); |
|
| - | 88 | } |
|
| 82 | #endif |
89 | #endif |
| 83 | 90 | ||
| 84 | /* enable timer 1 */ |
91 | /* enable timer 1 */ |
| 85 | #if act_hwPWM_CH1_COM>0 |
92 | #if act_hwPWM_CH1_COM>0 |
| 86 | TCCR1B|=(act_hwPWM_CH1_CS<<CS10); |
93 | TCCR1B|=(act_hwPWM_CH1_CS<<CS10); |
| Line 106... | Line 113... | ||
| 106 | gpio_set_out(EXP_G); |
113 | gpio_set_out(EXP_G); |
| 107 | #endif |
114 | #endif |
| 108 | 115 | ||
| 109 | /* set up counter mode for timer 0 */ |
116 | /* set up counter mode for timer 0 */ |
| 110 | #if act_hwPWM_CH3_COM>0 || act_hwPWM_CH4_COM>0 |
117 | #if act_hwPWM_CH3_COM>0 || act_hwPWM_CH4_COM>0 |
| - | 118 | if (pwmValue[2]>0) |
|
| - | 119 | { |
|
| 111 | TCCR0A|=(act_hwPWM_CH3_COM<< |
120 | TCCR0A|=(act_hwPWM_CH3_COM<<COM0A0); |
| - | 121 | } |
|
| - | 122 | if (pwmValue[3]>0) |
|
| - | 123 | { |
|
| - | 124 | TCCR0A|=(act_hwPWM_CH4_COM<<COM0B0); |
|
| - | 125 | } |
|
| 112 | #endif |
126 | #endif |
| 113 | 127 | ||
| 114 | /* enable timer 0 */ |
128 | /* enable timer 0 */ |
| 115 | #if act_hwPWM_CH3_COM>0 |
129 | #if act_hwPWM_CH3_COM>0 |
| 116 | TCCR0B|=(act_hwPWM_CH3_CS<<CS00); |
130 | TCCR0B|=(act_hwPWM_CH3_CS<<CS00); |
| 117 | #elif act_hwPWM_CH4_COM>0 |
131 | #elif act_hwPWM_CH4_COM>0 |
| 118 | TCCR0B|=(act_hwPWM_CH4_CS<<CS00); |
132 | TCCR0B|=(act_hwPWM_CH4_CS<<CS00); |
| 119 | #endif |
133 | #endif |
| 120 | 134 | ||
| - | 135 | //printf("1A %x, 1B %x, 0A %x, 0B %x\n", TCCR1A, TCCR1B, TCCR0A, TCCR0B); |
|
| 121 | 136 | ||
| 122 | } |
137 | } |
| 123 | 138 | ||
| 124 | void act_hwPWM_Process(void) |
139 | void act_hwPWM_Process(void) |
| 125 | { |
140 | { |
| 126 | if (Timer_Expired(act_hwPWM_STORE_VALUE_TIMEOUT)) |
141 | if (Timer_Expired(act_hwPWM_STORE_VALUE_TIMEOUT)) |
| 127 | { |
142 | { |
| 128 | if (pwmValue[0] != eeprom_read_word(EEDATA16.ch1)) |
143 | if (pwmValue[0] != eeprom_read_word(EEDATA16.ch1)) |
| 129 | { |
144 | { |
| 130 | eeprom_write_word_crc(EEDATA16.ch1, pwmValue[0], WITH_CRC); |
145 | eeprom_write_word_crc(EEDATA16.ch1, pwmValue[0], WITH_CRC); |
| 131 | } |
146 | } |
| 132 | if (pwmValue[1] != eeprom_read_word(EEDATA16.ch2)) |
147 | if (pwmValue[1] != eeprom_read_word(EEDATA16.ch2)) |
| 133 | { |
148 | { |
| 134 | eeprom_write_word_crc(EEDATA16.ch2, pwmValue[1], WITH_CRC); |
149 | eeprom_write_word_crc(EEDATA16.ch2, pwmValue[1], WITH_CRC); |
| 135 | } |
150 | } |
| 136 | if (pwmValue[2] != eeprom_read_word(EEDATA16.ch3)) |
151 | if (pwmValue[2] != eeprom_read_word(EEDATA16.ch3)) |
| 137 | { |
152 | { |
| 138 | eeprom_write_word_crc(EEDATA16.ch3, pwmValue[2], WITH_CRC); |
153 | eeprom_write_word_crc(EEDATA16.ch3, pwmValue[2], WITH_CRC); |
| 139 | } |
154 | } |
| 140 | if (pwmValue[3] != eeprom_read_word(EEDATA16.ch4)) |
155 | if (pwmValue[3] != eeprom_read_word(EEDATA16.ch4)) |
| 141 | { |
156 | { |
| 142 | eeprom_write_word_crc(EEDATA16.ch4, pwmValue[3], WITH_CRC); |
157 | eeprom_write_word_crc(EEDATA16.ch4, pwmValue[3], WITH_CRC); |
| 143 | } |
158 | } |
| 144 | } |
159 | } |
| 145 | } |
160 | } |
| 146 | 161 | ||
| 147 | void act_hwPWM_HandleMessage(StdCan_Msg_t *rxMsg) |
162 | void act_hwPWM_HandleMessage(StdCan_Msg_t *rxMsg) |
| 148 | { |
163 | { |
| 149 | if ( StdCan_Ret_class(rxMsg->Header) == CAN_MODULE_CLASS_ACT && |
164 | if ( StdCan_Ret_class(rxMsg->Header) == CAN_MODULE_CLASS_ACT && |
| 150 | StdCan_Ret_direction(rxMsg->Header) == DIRECTIONFLAG_TO_OWNER && |
165 | StdCan_Ret_direction(rxMsg->Header) == DIRECTIONFLAG_TO_OWNER && |
| Line 161... | Line 176... | ||
| 161 | switch (channel) |
176 | switch (channel) |
| 162 | { |
177 | { |
| 163 | #if act_hwPWM_CH1_COM>0 |
178 | #if act_hwPWM_CH1_COM>0 |
| 164 | case 1: |
179 | case 1: |
| 165 | OCR_1=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH1_FACT)>>8; |
180 | OCR_1=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH1_FACT)>>8; |
| - | 181 | if (pwmValue[channel-1]==0) |
|
| - | 182 | { |
|
| - | 183 | TCCR1A&=~((1<<COM1B0)|(1<<COM1B1)); |
|
| - | 184 | } |
|
| - | 185 | else |
|
| - | 186 | { |
|
| - | 187 | TCCR1A|=(act_hwPWM_CH1_COM<<COM1B0); |
|
| - | 188 | } |
|
| 166 | break; |
189 | break; |
| 167 | #endif |
190 | #endif |
| 168 | #if act_hwPWM_CH2_COM>0 |
191 | #if act_hwPWM_CH2_COM>0 |
| 169 | case 2: |
192 | case 2: |
| 170 | OCR_2=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH2_FACT)>>8; |
193 | OCR_2=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH2_FACT)>>8; |
| - | 194 | if (pwmValue[channel-1]==0) |
|
| - | 195 | { |
|
| - | 196 | TCCR1A&=~((1<<COM1A0)|(1<<COM1A1)); |
|
| - | 197 | } |
|
| - | 198 | else |
|
| - | 199 | { |
|
| - | 200 | TCCR1A|=(act_hwPWM_CH2_COM<<COM1A0); |
|
| - | 201 | } |
|
| 171 | break; |
202 | break; |
| 172 | #endif |
203 | #endif |
| 173 | #if act_hwPWM_CH3_COM>0 |
204 | #if act_hwPWM_CH3_COM>0 |
| 174 | case 3: |
205 | case 3: |
| 175 | OCR_3=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH3_FACT)>>8; |
206 | OCR_3=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH3_FACT)>>8; |
| - | 207 | if (pwmValue[channel-1]==0) |
|
| - | 208 | { |
|
| - | 209 | TCCR0A &= ~((1<<COM0A0)|(1<<COM0A1)); |
|
| - | 210 | } |
|
| - | 211 | else |
|
| - | 212 | { |
|
| - | 213 | TCCR0A|=(act_hwPWM_CH3_COM<<COM0A0); |
|
| - | 214 | } |
|
| 176 | break; |
215 | break; |
| 177 | #endif |
216 | #endif |
| 178 | #if act_hwPWM_CH4_COM>0 |
217 | #if act_hwPWM_CH4_COM>0 |
| 179 | case 4: |
218 | case 4: |
| 180 | OCR_4=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH4_FACT)>>8; |
219 | OCR_4=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH4_FACT)>>8; |
| - | 220 | if (pwmValue[channel-1]==0) |
|
| - | 221 | { |
|
| - | 222 | TCCR0A &= ~((1<<COM0B0)|(1<<COM0B1)); |
|
| - | 223 | } |
|
| - | 224 | else |
|
| - | 225 | { |
|
| - | 226 | TCCR0A|=(act_hwPWM_CH4_COM<<COM0B0); |
|
| - | 227 | } |
|
| 181 | break; |
228 | break; |
| 182 | #endif |
229 | #endif |
| 183 | } |
230 | } |
| 184 | sei(); |
231 | sei(); |
| 185 | Timer_SetTimeout(act_hwPWM_STORE_VALUE_TIMEOUT, act_hwPWM_STORE_VALUE_TIMEOUT_TIME*1000, TimerTypeOneShot, 0); |
232 | Timer_SetTimeout(act_hwPWM_STORE_VALUE_TIMEOUT, act_hwPWM_STORE_VALUE_TIMEOUT_TIME*1000, TimerTypeOneShot, 0); |