Цитата(-Игорь- @ May 25 2015, 13:48)

Первое...
Как раз побаловался STM8S903, вот что вышло:
CODE
inline void ADC_Init() {
/***************************************************/
ADC1->CR1 = 0;
ADC1->CSR = 0
| 1 * (3 << 0) /**CH [3:0] **/
| 1 * ADC1_CSR_EOCIE
| 0 * ADC1_CSR_AWDIE;
ADC1->CR1 = 0
| 1 * ADC1_CR1_ADON
| 0 * ADC1_CR1_CONT
| 1 * (7 << 4); /** SPSEL[6:4] **/
ADC1->CR2 = 0
| 1 * ADC1_CR2_SCAN
| 1 * ADC1_CR2_ALIGN /** 0: Left alignment, 1: Right alignment **/
| 0 * (0) /** EXTSEL[5:4] 00: Internal TIM1 TRGO, 01: External interrupt on ADC_ETR **/
| 1 * ADC1_CR2_EXTTRIG;
ADC1->CR3 = 0
| 0 * ADC1_CR3_OVR
| 0 * ADC1_CR3_DBUF;
ADC1->CR1 = 0
| 1 * ADC1_CR1_ADON
| 0 * ADC1_CR1_CONT
| 1 * (7 << 4); /** SPSEL[6:4] **/
}
extern volatile uint8_t rc[2];
INTERRUPT_HANDLER(ADC1_IRQHandler, 22) {
uint8_t reg = ADC1->CSR;
ADC1->CSR = 0
| 1 * (3 << 0) /**CH [3:0] **/
| 1 * ADC1_CSR_EOCIE
| 0 * ADC1_CSR_AWDIE;
rc[0] = ADC1->DB0RL >> 2;
rc[0] |= ADC1->DB0RH << 6;
rc[1] = ADC1->DB1RL >> 2;
rc[1] |= ADC1->DB1RH << 6;
}
в регистре ADC1->CR1 пишу константу
В прерывании для сброса флага загружаю константу, иначе проблемы
сейчас проверил установил CONT и выключил EXTTRIG -> работает.
8000000 / 18 / 14 / 4 = 7936,5
тактовая HSI/2, частота прерываний ~7,39kHz похоже тоже 15 тактов,
В даташите не сказано про защитный интервал между каналами, может это оно и есть?