BASIC4MCU | 질문게시판 | adc, uart dma
페이지 정보
작성자 hiㅡO3O 작성일2022-05-25 13:10 조회462회 댓글3건첨부파일
본문
해당 ADC, UART의 경우 DMA circular로 설정하였고
while문에 breakpoint를 걸어두어도 한번만 시행 후에 다시 걸리지 않습니다.
DMA의 경우에는 서로 DMAInterrutp에 breakpoint를 걸어보니 작동하는 것을 확인 했습니다.
댓글 3
조회수 462master님의 댓글
master 작성일
ADC를 금지시켜서 돌려보고
UART를 금지시켜서 돌려보면
어느 것이 문제인지 알 수 있겠죠
위 두 가지 경우 문제가 없다면, 두개가 동시에 동작할 때 문제가 발생하는 것이니 둘 다 문제입니다.
master님의 댓글
master 작성일
인터럽트든 DMA든
일정 시간 사이에서 점유율을 계산해보세요
인터럽트를 예로들면
인터럽트 주기가 100us 일 때, 메인 무한루프에서 LED ON, 딜레이0.5초, LED OFF, 딜레이0.5초 실행 중이면
인터럽트 함수 안에서의 코드 실행시간이 50us 걸린다면 메인의 LED 주기는 1초에서 2초로 늘어납니다.
인터럽트 함수 안에서의 코드 실행시간이 99us 걸린다면 메인의 LED 주기는 1초에서 99초로 늘어납니다.
인터럽트 함수 안에서의 코드 실행시간이 100us 이상이라면 메인의 LED 주기는 무진장 길어집니다.
hiㅡO3O님의 댓글
hiㅡO3O
먼저
ADC만, UART만 의 설정에서는 이상이 없으나
같이 사용할 때 문제가 발생했습니다.
따라서 언급하신 것 처럼 점유율을 한번 확인해 보았는데요.
ADC의 점유율이 매우 높아 둘이 동시에 쓰기에는 부족한 것으로 생각되어
ADC는 NORMAL로 TIM_interrup를 통해 원하는 주기마다 실행하여 점유율을 낮추니 제대로 작동합니다.
감사합니다!