Перейти к содержанию

YuraGl

Members
  • Постов

    7
  • Зарегистрирован

  • Посещение

Весь контент YuraGl

  1. В общем, сделал отдельными полигоны питания и земли для сенсора и убрал их с путей следования цифровых токов.
  2. Добрый день. Используется TOSHIBA CCD Linear Image Sensor TCD1304DG. Сенсором управляет ПЛИС. Оба компонента питаются от 3.3 В. Сигнал с вывода OS идет на компаратор на операционном усилителе. У сенсора есть выводы аналогового и цифрового питания. Как правильно разделить питание? Приводится изображение Pin Connections. Я полагаю, нужно подвести аналоговое питание на вывод Vad и так же на компаратор. Далее через преобразователь напряжения развязать выход компаратора и входа ПЛИС путем подачи на преобразователь напряжения аналоговой и цифровой земли. А вывод Vdd должен питаться тем же напряжением, что и ПЛИС.
  3. Я включал прерывание DMA перед подачей на него тактового сигнала. А после подачи тактового сигнала инициализировал его. По этой причине отправка данных работала, а прерывание нет.
  4. uint32_t ad [1] = {1}; void DMAinit (void) { *(uint32_t*)(0x40023830) |= 0x200000; // DMA1 enable *(uint32_t*)(0x400260A0) |= 0x2000000; // set stream and channel *(uint32_t*)(0x400260A8) = 0x40005410; // address of peripheral *(uint32_t*)(0x400260AC) = (uint32_t)ad; // address of memory_0 *(uint32_t*)(0x400260A4) = 1; // number of register to be transferred *(uint32_t*)(0x400260A0) |= 0x40; // DIR } void DMAstart (void) { *(uint32_t*)(0x40005404) |= 0x800; // i2c DMA enable *(uint32_t*)(0x400260A0) |= 0x1; // enable transfer } //------------------------------- void Init_i2c (void) { *(uint32_t*)(0x40020C00) |= 0x100; *(uint32_t*)(0x40020C18) = 0x10; *(uint32_t*)(0x40023830) |= 0x2; // setting of RCC_EN *(uint32_t*)(0x40023840) = 0x200000; // setting of RCC_EN *(uint32_t*)(0x40005404) = 0x8; // setting of FREQ *(uint32_t*)(0x4000541C) = 0x28; // setting of CCR *(uint32_t*)(0x40005420) = 0x9; // setting of TRICE *(uint32_t*)(0x40005400) = 0x0; // setting of I2C *(uint32_t*)(0x40005400) |= 0x1; // setting of PE *(uint32_t*)(0x40020404) = 0x240; // setting of PE } Данные отправляются через DMA по I2C.
  5. Пытался запустить прерывание по событию I2C, тоже не заработало.
  6. Если не ошибаюсь, по указанному адресу будет находиться DMA stream x number of data register.
  7. YuraGl

    Настройка прерывания

    Добрый день. Пытаюсь настроить прерывание на STM32F407. Включил глобальное прерывание, в NVIC регистре разрешил требуемое прерывание и в DMA разрешил прерывание по окончании передачи данных. Программа не заходит в обработчик прерываний. При считывании флагов прерываний DMA видно, что флаг окончания передачи поднят. asm volatile ("CPSIE I"); // global interrupt enable *(uint32_t*)(0xE000E100) |= 0x20000; // global interrupt dma1 stream6 enable *(uint32_t*)(0x400260A0) |= 0x10; // interrupt transfer complete enable void DMA1_Stream6_IRQHandler (void) { while (1) { } }
×
×
  • Создать...