c언어 타이머 관련질문입니다
거늘
제가 c공부중 타이머 부분을 공부하게됐는데 아직 모르는게 많아서
주석을 달면서 공부중인데 모르는 부분이있어서 아시는분은 주석좀...
/*---------------------------------------------------------------------------------------------------------*/
/* Function: GetTimerClock */
/* */
/* Parameters: */
/* ch - [in] */
/* E_TIMER_CHANNEL, it could be E_TMR0/E_TMR1/E_TMR2/E_TMR3 */
/* Returns: */
/* u32clk The timer clock (Hz) */
/* E_DRVTIMER_CHANNEL Invalid Timer channel */
/* E_DRVTIMER_CLOCK_RATE Invalid Timer clock source */
/* Description: */
/* Get the timer clock from the specified timer channel. */
/*---------------------------------------------------------------------------------------------------------*/
static uint32_t GetTimerClock(E_TIMER_CHANNEL ch)
{
volatile uint8_t u8ClockSrc;
volatile uint32_t u32clk = 0;
if ((ch == E_TMR0) || (ch == E_TMR1) || (ch == E_TMR2) || (ch == E_TMR3))
{
u8ClockSrc = (inpw(&SYSCLK-CLKSEL1) (8+(ch*4))) & 0x7;
if (u8ClockSrc == 0)
{
u32clk = DrvSYS_GetExtClockFreq() ; /* Option 0: Get External Clock From DrvSYS Setting */
}
else if(u8ClockSrc == 1)
{
u32clk = __RTC_XTAL; /* Option 1: 32K */
}
else if(u8ClockSrc == 2)
{
u32clk = DrvSYS_GetHCLKFreq(); /* Option 2: HCLK */
}
else if(u8ClockSrc == 7)
{
u32clk = __IRC22M;p; /* Option 7: 22MHz*/
}else
{
return E_DRVTIMER_CLOCK_RATE;
}
}
else
return E_DRVTIMER_CHANNEL;
return u32clk;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: CalTimerInitValue */
/* */
/* Parameters: */
/* u32ClockValue - [in] */
/* Input the clock value of Timer */
/* u32TicksPerSec - [in] */
/* Specify the ticks per second of Timer */
/* Returns: */
/* Return 32 bits unsigned integer where */
/* bits [ 0:23] - The Timer Compare Value(TCMPR) for Timer */
/* bits [24:31] - The pre-scale value for Timer */
/* (uint32_t)-1 Out of range */
/* Description: */
/* Calculate the Timer Compare Value and pre-scale value for Timer */
/*---------------------------------------------------------------------------------------------------------*/
static uint32_t CalTimerInitValue(uint32_t u32ClockValue, uint32_t u32TicksPerSec)
{
uint32_t u32PreScale;
uint32_t u32TCMPRValue;
if ((u32ClockValue 2) || (u32TicksPerSec == 0))
return (uint32_t)-1;
for (u32PreScale=1; u32PreScale256; u32PreScale++)
{
u32TCMPRValue = u32ClockValue / (u32TicksPerSec * u32PreScale);
/* The TCMPR value must 1 */
if ((u32TCMPRValue 1) && (u32TCMPRValue 0x1000000))
return (((u32PreScale-1) 24) | u32TCMPRValue);
}
return (uint32_t)-1;
}
-
알찬해
소스가 펌웨어 소스 같은데 임베디드 사이트에 문의 해보시는게 나을거 같은데요?
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2693869 | stdio.h 는 왜 쓰는건가요? (1) | 큰꽃들 | 2025-05-06 |
2693842 | 포인터 변수의 주소값끼리 더하는 것에 대해서 질문드립니다. (1) | 진솔 | 2025-05-05 |
2693811 | 소수 출력;;;; | 화이트캣 | 2025-05-05 |
2693788 | 이런 함수는 없나요? (3) | 앤드류 | 2025-05-05 |
2693758 | txt파일 불러와서 행렬로 저장 | 큰애 | 2025-05-05 |
2693727 | scanf 오류 문제!! (2) | 큰나래 | 2025-05-04 |
2693704 | 구조체 주소록 문제인데 도와주세요 (2) | 도1도캣 | 2025-05-04 |
2693676 | 열혈강의 c언어 질문입니다 | 하양이 | 2025-05-04 |
2693647 | 12.620000 을요 12.620 으로 어떻게 표현해요? (2) | 파도 | 2025-05-04 |
2693619 | 타이틀 코드.. | 단순드립 | 2025-05-03 |
2693591 | 컴파일 에러에서 질문드립니다 (3) | 게자리 | 2025-05-03 |
2693463 | 동적할당 이용시 fwrite사용을 어떻게 해야하나요..? (10) | 일본어못해요 | 2025-05-02 |
2693387 | 배열문제입니다 수정오류캡쳐했습니다 (6) | 연하얀 | 2025-05-01 |
2693356 | text 입출력 내림차순 질문입니다 ㅠ | 빛글 | 2025-05-01 |
2693328 | C언어를이용해서 .txt파일 외에 다른 확장자 파일 삭제가 가능한지.. (2) | 대나무 | 2025-05-01 |
2693299 | 파일입출력 바이너리파일 | 독특한 | 2025-04-30 |
2693273 | 오류 (1) | 귀1여운렩 | 2025-04-30 |
2693080 | visual studio 2008 express edition 등록키 말인데요 | 얀별 | 2025-04-28 |
2693053 | 배열, 구조체 관련 프로그래밍 질문드립니다. | 싸리 | 2025-04-28 |
2693025 | 프로그램을 짜봤는데요 ㅠㅠ | 상처입은마음 | 2025-04-28 |