forked from yystopf/xiuos
fix hwtimer bug for edu-arm32 board
This commit is contained in:
parent
3aa16a8666
commit
b9801f0a38
|
@ -22,7 +22,7 @@
|
|||
#include <transform.h>
|
||||
#ifdef ADD_XIZI_FEATURES
|
||||
|
||||
#define BSP_LED_PIN 29
|
||||
#define BSP_LED_PIN 134
|
||||
#define NULL_PARAMETER 0
|
||||
|
||||
static uint16_t pin_fd=0;
|
||||
|
@ -30,6 +30,7 @@ static struct PinStat pin_led;
|
|||
|
||||
void LedFlip(void *parameter)
|
||||
{
|
||||
printf("%s val %d time %d\n", __func__, pin_led.val, PrivGetTickTime());
|
||||
pin_led.pin = BSP_LED_PIN;
|
||||
pin_led.val = !pin_led.val;
|
||||
PrivWrite(pin_fd, &pin_led, NULL_PARAMETER);
|
||||
|
@ -37,7 +38,7 @@ void LedFlip(void *parameter)
|
|||
|
||||
void TestHwTimer(void)
|
||||
{
|
||||
x_ticks_t period = 1;
|
||||
uint32_t period_ms = 500;
|
||||
|
||||
pin_fd = PrivOpen(HWTIMER_PIN_DEV_DRIVER, O_RDWR);
|
||||
if(pin_fd<0) {
|
||||
|
@ -75,7 +76,7 @@ void TestHwTimer(void)
|
|||
return;
|
||||
}
|
||||
|
||||
ioctl_cfg.args = (void *).
|
||||
ioctl_cfg.args = (void *)&period_ms;
|
||||
if (0 != PrivIoctl(timer_fd, OPE_CFG, &ioctl_cfg)) {
|
||||
printf("timer pin fd error %d\n", pin_fd);
|
||||
PrivClose(pin_fd);
|
||||
|
|
|
@ -20,13 +20,12 @@
|
|||
|
||||
#include <connect_hwtimer.h>
|
||||
|
||||
#define TMR0_CMP_VAL 1000
|
||||
#define TMR0_CMP_VAL (100000000U / 1024U / 2 - 1U)
|
||||
#define TMR0x ((CM_TMR0_TypeDef *)CM_TMR0_1_BASE)
|
||||
#define TMR0_CH_x (TMR0_CH_A)
|
||||
#define INTSEL_REG ((uint32_t)(&CM_INTC->SEL0))
|
||||
#define TIMER0_IRQn (18)
|
||||
|
||||
|
||||
void (*callback_function)(void *) ;
|
||||
|
||||
static void Timer0Callback(int vector, void *param)
|
||||
|
@ -47,7 +46,7 @@ static uint32 HwtimerOpen(void *dev)
|
|||
|
||||
/* TIMER0 basetimer function initialize */
|
||||
(void)TMR0_StructInit(&stcTmr0Init);
|
||||
stcTmr0Init.u32ClockDiv = TMR0_CLK_DIV128; /* Config clock division */
|
||||
stcTmr0Init.u32ClockDiv = TMR0_CLK_DIV1024; /* Config clock division */
|
||||
stcTmr0Init.u32ClockSrc = TMR0_CLK_SRC_INTERN_CLK; /* Chose clock source */
|
||||
stcTmr0Init.u32Func = TMR0_FUNC_CMP; /* Timer0 compare mode */
|
||||
stcTmr0Init.u16CompareValue = TMR0_CMP_VAL; /* Set compare register data */
|
||||
|
@ -98,7 +97,8 @@ static uint32 HwtimerDrvConfigure(void *drv, struct BusConfigureInfo *configure_
|
|||
break;
|
||||
case OPE_CFG:
|
||||
TMR0_ClearStatus(TMR0x, TMR0_FLAG_CMP_A);
|
||||
TMR0_SetCompareValue(TMR0x, TMR0_CH_x, *((int *)configure_info->private_data) );
|
||||
uint32_t cmp_value = *((uint32_t *)configure_info->private_data) * 100;//1ms 100, max 655ms 65535
|
||||
TMR0_SetCompareValue(TMR0x, TMR0_CH_x, (uint16_t)cmp_value);
|
||||
/* Timer0 interrupt function Enable */
|
||||
TMR0_SetCountValue(TMR0x, TMR0_CH_x, 0x0000);
|
||||
TMR0_Start(TMR0x, TMR0_CH_x);
|
||||
|
|
Loading…
Reference in New Issue