본문 바로가기

TiMER12

LDD ] 커널 시간 관련 함수 사용법 1. HZ와 jiffies HZ초당 발생하는 타이머 인터럽트의 수를 나타내는 상수로, 플랫폼마다 다르지만 일반적으로 250으로 설정된다.  jiffies커널에서 사용하는 시간 단위의 전역 변수로, 부팅 이후 매 타이머 인터럽트마다 1씩 증가하는 tick 카운터이다. 즉, jiffies는 초당 HZ의 수 만큼 증가하며, HZ가 250으로 설정된 경우 1 jiffy는 1 / HZ = 1 / 250 = 4ms이다.  현재 시스템의 HZ 값을 터미널에서 확인하는 법현재 실행 중인 커널의 컴파일 시 설정 정보는 /boot/config-$(uname -r) 이름으로 파일시스템에 노출되는데, 해당 파일에서 다음 명령을 통해 HZ 설정값을 확인할 수 있다. grep CONFIG_HZ /boot/config-$(unam.. 2025. 2. 27.
TMS320F28388D ] getTick 구현 ISR에서 사용할 volatile msTick변수와 getTick함수는 모든 HW드라이버파일이 사용할 수 있는 헤더 extern 해둠 volatile uint32_t msTick; uint32_t getTick(void) { return msTick; } main.c 사용 예 timerOpen(TIMER_CH1, 1000, &timer0ISR); //... for(;;) { if(getTick()-timeBefore > 1000) { timeBefore = getTick(); print("\r\nHello World!"); } } timerOpen함수는 함수포인터로 받아서 콜백함수 등록 __interrupt void timer0ISR(void) { msTick++; // Acknowledge this i.. 2023. 2. 21.
C#, WinForms ] 스탑워치, Stopwatch 클래스, DateTime 구조체, Timer 활용 using System.Diagnostics; //... private Stopwatch stopwatch = new Stopwatch(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // textBox 초기값 this.textBox2.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); this.textBox2.Text = ""; } private void button1_Click(object sender, EventArgs e) { // Stopwatch, Timer 스타트 stopwatch.Start(); this.timer1.St.. 2023. 2. 20.
TMS320F28388D ] IPC 사용하여 CPU1과 CPU2 타이머 Tick 값 Synchronization CPU1 코드 // ...IPC_clearFlagLtoR(IPC_CPU1_L_CPU2_R, IPC_FLAG_ALL);IPC_sync(IPC_CPU1_L_CPU2_R, IPC_FLAG31);msTick = 0;CPUTimer_startTimer(CPUTIMER0_BASE); // ...   CPU2 코드 // ...IPC_clearFlagLtoR(IPC_CPU2_L_CPU1_R, IPC_FLAG_ALL);IPC_sync(IPC_CPU2_L_CPU1_R, IPC_FLAG31);msTick = 0;CPUTimer_startTimer(CPUTIMER0_BASE);// ...    두 코어간 동기화를 위한 API인 IPC_Sync() 함수 내부는 다음과 같다.//! Synchronises the two co.. 2023. 1. 26.
TMS320F28388D ] 타이머, Timer Interrupt 사용하기 TMS320F28388D 모델에는 32bit Timer가 CPU당 각 3개씩 총 6개가 있다. 특이한 것은 Timer1,2 인터럽트는 각각 INT13, INT14에 연결되어 있고 Timer0는 PIE Interrupt Group 1의 7번째로 자리잡고 있다. 매뉴얼 153페이지 벡터 테이블 CPU0 TIMER가 higher priority를 가지고 그 다음이 CPU1 TIMER 그리고 CPU2 TIMER 이다. CPU 타이머 레지스터는 다음과 같다. 먼저 카운터 레지스터의 설명을 살펴보자. TIM 레지스터는 SYSCLOCK 을 Prescaler값(TDDR+1)으로 분주한 clock cycle 에 따라 감소하고 그러다 0에 도달하면 Period 레지스터(PRD)에 있는 값으로 reload 되며 타이머 인터.. 2022. 12. 5.
STM32 ] TIMER OC (Output Compare 단자 출력) 사용 예제 OC : 출력비교 모드는 카운터(CNT)의 값이 캡쳐/비교기에 설정된 (CCRx)값과 일치할 때 인터럽트 또는 해당 핀에 출력을 발생시키는 모드이다. 이전에 이어서 타이머 OC 모드에서 핀의 출력을 사용하는 버전이다. 핀 출력을 쓰는 모드로 설정했기 때문에 핀이 잡힌다. PSC를 9000-1로 해서 10KHz로 분주하고 ARR은 16비트 카운터 타이머의 최대값인 0xffff-1로 한다. 이렇게 하면 업데이트 인터럽트가 6.5535초 마다 발생할 거다 하지만 업데이트 인터럽트는 안쓴다. 모든채널을 OC 인터럽트 발생시 출력이 토글되게끔 설정하고 CCR값은 위와 같이 설정한다. 소스코드 /* USER CODE BEGIN 2 */ HAL_TIM_OC_Start_IT(&htim3, TIM_CHANNEL_1); .. 2022. 7. 21.
STM32 ] SysTick Timer Callback 함수 사용하기 이전에 분명 정리한 거 같은데 기록이 없어서 정리용도로 빠르게 테스트해봄 HAL_GetTick 함수를 따라가 보면 uwTick을 리턴하는 것으로 되어있다. 이 uwTick이 SysTick 타이머 클락 소스로 1밀리초마다 카운트되고 HAL_Delay 함수도 이 uwTick을 사용하고 있다. Drivers - STM32F4xx_HAL_Driver - Src - stm32f4xx_hal_cortex.c 파일에 가면 아래와 같이 있다. 그중에 HAL_SYSTICK_IRQHandler() 함수를 가져와 stm32f4xx_it.c 에 있는 SysTick_Handler() 함수 안에 넣는다. 그리고 아까 IRQHandler() 함수 바로 아래 있던 HAL_SYSTICK_Callback 함수를 가져와 전역구간에서 재정.. 2022. 7. 14.
STM32 ] Timer 인터럽트를 사용하여 ADC 값 받기 + 그래프 보면서 디버깅하는 팁 ADC : Analogue to Digital Converter, 아날로그 신호를 디지털 신호로 변환하는 것으로 샘플링(Sampling), 양자화(Quantizing), 부호화(Coding) 과정을 거친다. 샘플링 : 아날로그 파형을 디지털 형태로 변환하기 위해 표본을 취하는 것 양자화 : 표본화된 각 점을 어느 정도 resolution 으로 표현할지 정해 변환하는 것. 예를들어 8비트면 256단계로 세분화 부호화 : 앞의 단계를 거친 디지털 정보를 2진수로 표현하는 것 ADC를 인터럽트방식으로 사용하면 끊임없이 인터럽트가 트리거되어 다른 부분에 문제를 일으킨다. Timer 인터럽트와 ADC 폴링방식을 사용하여 ADC의 샘플링 주기를 조절하는 방법을 소개한다. 먼저 테스트를 위해 사용할 것은 아두이노에 .. 2022. 6. 17.
STM32 프로젝트 , 팩맨 게임 ( ADC in DMA mode 로 조이스틱 이용한 방향제어 , I2C LCD , Timer 인터럽트 및 PWM 사용 ) 코드는 GitHub에 공개되어 있으니 자유롭게 참고하여도 됩니다.다만, 본 프로젝트를 그대로 가져가 교육기관 프로젝트로 사용하는 것은 지양하기 바라며, 그렇게 사용할 경우에는 출처를 표기하기 바랍니다.  개인 프로젝트제작기간 : 3일보드 : STM32F429ZITool : STM32CubeIDE I2C LCD 모듈, 조이스틱, 수동부저 사용  https://github.com/joeteo/Pacman GitHub - joeteo/Pacman: STM32 Pacman game with LCD and JoystickSTM32 Pacman game with LCD and Joystick. Contribute to joeteo/Pacman development by creating an account on Gi.. 2022. 5. 31.
STM32 , UART 통신 ( 수신 ) 을 이용한 PWM 서보모터 ( SG90 ) 제어 + 펄스폭 찾아내는 팁 UART 설정 USART3을 비동기식으로 켜준다. Parameter는 디폴트로 놔두고 폴링방식을 사용할거면 NVIC 세팅을 켜주지 않아도 된다. 만약 MCU/MPU Selector로 시작했다면 보드매뉴얼을 보고 핀도 제대로 잡아주어야 한다. Timer 설정 클락설정은 아래와 같다. Timer 의 클락이 어떤 버스에서 제공되는지는 datasheet 20페이지의 블록 다이어그램을 보면 알 수 있다. 내가 사용할 TIM2가 쓰는 클락은 APB1이다. Internal Clock 소스로 설정해주고 PWM Generation CH1을 선택해준다. TIM2, PWM CH1에 어떤핀이 연결되어 있는지는 보드매뉴얼을 보고 알 수 있다. Board Selector 를 선택했다면 MX툴에서 그냥 채널 활성화 시키면 해당핀이.. 2022. 5. 26.