Browse Source

更新MCU工程(iram版本和sram-nos版本)驱动代码逻辑
更新PWMCAP相关驱动,原驱动中MCU实际使用的是CPU的PWMCAP,MCU和CPU同时使用时,因sema权限只归其中一方,另一方可能会存在读不到正确寄存器值的情况。

helen 3 months ago
parent
commit
08a6308abe

+ 2 - 1
amt630hv160-mcu/amt630hv160-mcu-iram/src/ArkmicroFiles/libcpu-amt630hv160/include/amt630hv160_map.h

@@ -837,6 +837,7 @@ typedef struct {
 #define MCU_CANFD1_BASE		0x55700000
 #define MCU_UART0_BASE		0x55800000
 #define MCU_PWM_BASE		0x55900000
+#define MCU_PWMCAP_BASE		0x55900100
 #define MCU_EHSE_BASE		0x59000000
 #define MCU_TRNG_BASE		0x5a000000
 
@@ -1015,7 +1016,7 @@ typedef struct {
 #endif /*_DCIC */
 
 #ifdef _PWMCAP
-	#define PWMCAP                ((PWMCAP_TypeDef *) PWMCAP_BASE)
+	#define PWMCAP                ((PWMCAP_TypeDef *) MCU_PWMCAP_BASE)
 #endif /*_PWMCAP */
 /*----------------------  Debug Mode -----------------------------------------*/
 #else   /* DEBUG */

+ 1 - 1
amt630hv160-mcu/amt630hv160-mcu-iram/src/ArkmicroFiles/libcpu-amt630hv160/source/amt630hv160_lib.c

@@ -196,7 +196,7 @@ void debug(void)
 
 /************************************* PWMCAP *********************************/
 #ifdef _PWMCAP
-	PWMCAP = (PWMCAP_TypeDef*) PWMCAP_BASE;
+	PWMCAP = (PWMCAP_TypeDef*) MCU_PWMCAP_BASE;
 #endif /*_PWMCAP */
 
 }

+ 3 - 3
amt630hv160-mcu/amt630hv160-mcu-iram/src/ArkmicroFiles/libcpu-amt630hv160/source/amt630hv160_pwmcap.c

@@ -100,7 +100,7 @@ static uint32_t pwm_cap_get_freq(PWMCAP_CH id)
 	return PWMCAP->pwmcap[id].FRQCAP;
 }
 
-void PWM_IRQHandler(void *para)
+void MCU_PWM_IRQHandler(void *para)
 {
 	uint32_t val;
 	PWMCAP_CH id;
@@ -110,7 +110,7 @@ void PWM_IRQHandler(void *para)
 	for (id = PWMCAP_CH0; id < PWMCAP_CH_NUM; id++) {
 		if (val & (1 << id)) {
 			PWMCAP->INT_CLR = 1 << id;
-			pwmCapVal[id] = pwm_cap_get_freq(id);
+			pwmCapVal[id] = pwm_cap_get_freq(id)/16;
 			//printf("pwmCapVal[%d]=0x%x.\n", id, pwmCapVal[id]);
 			PWMCAP->INT_CLR = 0;
 			pwm_cap_en(id, 1);
@@ -146,7 +146,7 @@ void PWMCAP_Init(void)
 {
 	PWMCAP_CH id;
 
-	NVIC_RegisterIrq(PWM_IRQChannel, PWMCAP_INT_PRIORITY, 0);
+	NVIC_RegisterIrq(MCU_PWM_IRQChannel, PWMCAP_INT_PRIORITY, 0);
 	for (id = PWMCAP_CH0; id < PWMCAP_CH_NUM; id++)
 		pwm_cap_initial(id);
 }

+ 2 - 1
amt630hv160-mcu/amt630hv160-mcu-sram-nos/src/ArkmicroFiles/libcpu-amt630hv160/include/amt630hv160_map.h

@@ -839,6 +839,7 @@ typedef struct {
 #define MCU_CANFD1_BASE		0x55700000
 #define MCU_UART0_BASE		0x55800000
 #define MCU_PWM_BASE		0x55900000
+#define MCU_PWMCAP_BASE		0x55900100
 #define MCU_EHSE_BASE		0x59000000
 #define MCU_TRNG_BASE		0x5a000000
 
@@ -1017,7 +1018,7 @@ typedef struct {
 #endif /*_MCU_PWM */
 
 #ifdef _PWMCAP
-	#define PWMCAP                ((PWMCAP_TypeDef *) PWMCAP_BASE)
+	#define PWMCAP                ((PWMCAP_TypeDef *) MCU_PWMCAP_BASE)
 #endif /*_PWMCAP */
 /*----------------------  Debug Mode -----------------------------------------*/
 #else   /* DEBUG */

+ 1 - 1
amt630hv160-mcu/amt630hv160-mcu-sram-nos/src/ArkmicroFiles/libcpu-amt630hv160/source/amt630hv160_lib.c

@@ -195,7 +195,7 @@ void debug(void)
 
 /************************************* PWMCAP *********************************/
 #ifdef _PWMCAP
-	PWMCAP = (PWMCAP_TypeDef*) PWMCAP_BASE;
+	PWMCAP = (PWMCAP_TypeDef*) MCU_PWMCAP_BASE;
 #endif /*_PWMCAP */
 
 }

+ 3 - 3
amt630hv160-mcu/amt630hv160-mcu-sram-nos/src/ArkmicroFiles/libcpu-amt630hv160/source/amt630hv160_pwmcap.c

@@ -99,7 +99,7 @@ static uint32_t pwm_cap_get_freq(PWMCAP_CH id)
 	return PWMCAP->pwmcap[id].FRQCAP;
 }
 
-void PWM_IRQHandler(void *para)
+void MCU_PWM_IRQHandler(void *para)
 {
 	uint32_t val;
 	PWMCAP_CH id;
@@ -109,7 +109,7 @@ void PWM_IRQHandler(void *para)
 	for (id = PWMCAP_CH0; id < PWMCAP_CH_NUM; id++) {
 		if (val & (1 << id)) {
 			PWMCAP->INT_CLR = 1 << id;
-			pwmCapVal[id] = pwm_cap_get_freq(id);
+			pwmCapVal[id] = pwm_cap_get_freq(id)/16;
 			//printf("pwmCapVal[%d]=0x%x.\n", id, pwmCapVal[id]);
 			PWMCAP->INT_CLR = 0;
 			pwm_cap_en(id, 1);
@@ -145,7 +145,7 @@ void PWMCAP_Init(void)
 {
 	PWMCAP_CH id;
 
-	NVIC_RegisterIrq(PWM_IRQChannel, PWMCAP_INT_PRIORITY, 0);
+	NVIC_RegisterIrq(MCU_PWM_IRQChannel, PWMCAP_INT_PRIORITY, 0);
 	for (id = PWMCAP_CH0; id < PWMCAP_CH_NUM; id++)
 		pwm_cap_initial(id);
 }