Open teneg13 opened 7 months ago
Не могли бы вы указать руководство, среду и версию SDK которыми вы пользовались?
#include <K1921VK035.h>
#include <math.h>
void ADC_SEQ0_IRQHandler () {
GPIOB->DATAOUTTGL = 0b1UL << 5; //инверсия выхода
ADC->IC_bit.SEQIC0 = 1;// сброс флага
}
int main() {
//RCU
RCU->OSICFG_bit.EN=1; // включение осциллиратора
RCU->OSICFG_bit.CAL=8; // подстройка частоты внутр осциллиратора на 8МГц
RCU->PLLCFG_bit.REFSRC=1;//Выбор источника тактирования
RCU->PLLCFG_bit.N=2;//коэф N
RCU->PLLCFG_bit.M=50;//коэф M
RCU->PLLCFG_bit.OD=1;//коэф OD
RCU->PLLCFG_bit.OUTEN=1;//Разрешение вывода частоты с PLL
RCU->SYSCLKCFG_bit.SYSSEL= 2; //тактовый сигнал с PLL для системного тактового сигнала
RCU->ADCCFG_bit.CLKSEL= 1; // Выбираем в качестве источника выходную частоту
RCU->ADCCFG_bit.DIVN = 1; // делитель частоты на 4
RCU->ADCCFG_bit.DIVEN= 1; // разрешение делителя входного сигнала
RCU->ADCCFG_bit.CLKEN= 1; // включение тактирования блока АЦП
RCU->ADCCFG_bit.RSTDIS= 1; // отключение сброса
RCU->PCLKCFG_bit.TMR0EN= 1;
RCU->PRSTCFG_bit.TMR0EN= 1;
RCU->HCLKCFG_bit.GPIOBEN = 1; // Enable clocking of GPIOB
RCU->HRSTCFG_bit.GPIOBEN = 1; // Remove Reset of GPIOB
// Настройка таймера
TMR0->LOAD= 999999;
TMR0->ADCSOC_bit.EN = 1;//разрешение управления АЦП таймером
//ADC
ADC->ACTL_bit.ADCEN = 1; // разрешение работы АЦП
ADC->EMUX_bit.EM0 = 3; //срабатывание от таймера
ADC->SEQ[0].SCCTL_bit.ICNT = 0;//количество записей в FIFO для прерывания
ADC->SEQ[0].SCCTL_bit.RCNT = 0;//количество перезапусков
ADC->SEQ[0].SRTMR = 0; // время задержки перезапуска секвенсора 0
ADC->SEQ[0].SRQCTL_bit.RQMAX = 0; // измерения по одному каналу
ADC->SEQ[0].SRQSEL_bit.RQ0 =0; //приоретет опроса
ADC->SEQEN_bit.SEQEN0 = 1;//разрешение работы сенквенстора
ADC->IM_bit.SEQIM0 = 1;
NVIC_EnableIRQ(ADC_SEQ0_IRQn);
// Запуск
while(!ADC->ACTL_bit.ADCRDY);
TMR0->CTRL_bit.ON = 1; //включение таймера
//порт
GPIOB->DENSET = 0b1UL << 5; // Connect pin 5 to digital subsystem
GPIOB->INMODE |= 0b11UL << 10; // Input functionality disabled
GPIOB->PULLMODE &= ~(0b11UL << 10); // No Pull Up/Down
GPIOB->OUTMODE &= ~(0b11UL << 10); // Output push-pull
GPIOB->DRIVEMODE &= ~(0b11UL << 10); // High speed, high current
GPIOB->OUTENSET = 0b1UL << 5; // Enable pin control by DataOut reg
GPIOB->ALTFUNCCLR = 0b1UL << 5; // Disable alt func at the pin
while(1);
}
Исправили название функции включения прерывания Энвик_EnableIRQ(ADC_SEQ0_IRQn)
, на NVIC_EnableIRQ(ADC_SEQ0_IRQn)
. После исправления программа успешно запустилась на плате UNO-VN035.
Не могли бы вы указать руководство, среду и версию SDK которыми вы пользовались? SDK - Arduino IDE 2.1.1, платформа версии 1.0.3 1921VK035.pdf
к сожалению код не заработал
Есть ли возможность во время работы программы смотреть что лежит в регистрах и ставить точки остановы?
Да полноценный debug поддерживается в ide VScode с расширением platfrmio. Для вашего кода не требуется зависимости от Arduino framework, достаточно будет k1921vk_sdk. Можно начать с этого примера проекта NIIET_SDK_vostok_uno_vn035_led_blink
Написал программу инверсии порта при заходе в прерывание АЦП по таймеру, код написан по руководству, но почему то не заходит в прерывание.