Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
H
haoJin750TFT
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
时昊
haoJin750TFT
Commits
9b31a9e8
Commit
9b31a9e8
authored
Sep 13, 2024
by
张金硕
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
🐞
fix:Trmer.c的QAC问题
parent
c45f0b9f
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
262 additions
and
221 deletions
+262
-221
TrmerM.c
...are/Source/Device/Cmsemicon/BAT32A279/RTE/TrmerM/TrmerM.c
+262
-221
No files found.
Firmware/Source/Device/Cmsemicon/BAT32A279/RTE/TrmerM/TrmerM.c
View file @
9b31a9e8
...
...
@@ -12,11 +12,8 @@
typedef
struct
{
TIMERM_PWM_Counter_en_t
counter
;
//定时器选择
}
Display_mode_Struct
;
TIMERM_PWM_Counter_en_t
counter
;
// 定时器选择
}
Display_mode_Struct
;
/*-------------------PWM相关-------------------------------------*/
// extern void TimerB_PWM_Init(void);
...
...
@@ -32,9 +29,9 @@ typedef struct
TMM_InitTypeDef
TIMM_InitStructure
[
2
]
=
{
0
};
static
uint32_t
cycle_pulse
[
2
];
//一个周期的时钟数 //频率
static
uint32_t
high_level_Pulse
[
2
][
3
];
//高电平时钟数 //占空比
static
uint32_t
pwm_duty
[
2
][
3
];
static
uint32_t
cycle_pulse
[
2
]
=
{
0
}
;
//一个周期的时钟数 //频率
static
uint32_t
high_level_Pulse
[
2
][
3
]
=
{
0
}
;
//高电平时钟数 //占空比
static
uint32_t
pwm_duty
[
2
][
3
]
=
{
0
}
;
/**
* @brief 设置TimerM的定时器x的模式为比较输出
...
...
@@ -43,25 +40,41 @@ static uint32_t pwm_duty[2][3];
* @param freq 比较输出频率
* @return uint8_t 返回0成功,非0失败
*/
uint8_t
TimerM_PWM_counter_Output_Init
(
TIMERM_PWM_Counter_en_t
counter
,
uint16_t
freq
,
uint32_t
PWM_Clock
)
//, uint32_t PWM_Clock //SystemCoreClock
uint8_t
TimerM_PWM_counter_Output_Init
(
TIMERM_PWM_Counter_en_t
counter
,
uint16_t
freq
,
uint32_t
PWM_Clock
)
//, uint32_t PWM_Clock //SystemCoreClock
{
if
((
counter
<
0
)
||
(
counter
>=
TIMERM_COUNTER_MAX
))
{
return
1
;
}
else
{
if
(
counter
==
TIMERM_COUNTER0
)
{
TIMM_InitStructure
[
counter
].
TMM_Select
=
TMM0
;
TIMM_InitStructure
[
counter
].
TMM_Channel
=
TMM_Channel_A
|
TMM_Channel_B
|
TMM_Channel_C
|
TMM_Channel_D
;
TIMM_InitStructure
[
counter
].
TMM_Mode
=
TMM_Mode_PWM
;
TIMM_InitStructure
[
counter
].
TMM_CounterClear
=
TM_Clear_Match_TMGRA
;
// when TM is matched with TMGRA, TM0 is cleared
TIMM_InitStructure
[
counter
].
TMM_Intp
=
TMM_Int_NONE
;
/// compare match interrupt enable A (IMIEA)
}
else
if
(
counter
==
TIMERM_COUNTER1
)
{
TIMM_InitStructure
[
counter
].
TMM_Select
=
TMM1
;
TIMM_InitStructure
[
counter
].
TMM_Channel
=
TMM_Channel_A
|
TMM_Channel_B
;
//|TMM_Channel_C|TMM_Channel_D;
TIMM_InitStructure
[
counter
].
TMM_Mode
=
TMM_Mode_PWM
;
TIMM_InitStructure
[
counter
].
TMM_CounterClear
=
TM_Clear_Match_TMGRA
;
// when TM is matched with TMGRA, TM0 is cleared
TIMM_InitStructure
[
counter
].
TMM_Intp
=
TMM_Int_NONE
;
/// compare match interrupt enable A (IMIEA)
}
else
{
return
1
;
}
TIMM_InitStructure
[
counter
].
TMM_Channel
=
TMM_Channel_A
|
TMM_Channel_B
|
TMM_Channel_C
|
TMM_Channel_D
;
TIMM_InitStructure
[
counter
].
TMM_Mode
=
TMM_Mode_PWM
;
TIMM_InitStructure
[
counter
].
TMM_CounterClear
=
TM_Clear_Match_TMGRA
;
//when TM is matched with TMGRA, TM0 is cleared
TIMM_InitStructure
[
counter
].
TMM_Intp
=
TMM_Int_NONE
;
///compare match interrupt enable A (IMIEA)
//
TIMM_InitStructure[counter].TMM_Channel = TMM_Channel_A|TMM_Channel_B|TMM_Channel_C|TMM_Channel_D;
// TIMM_InitStructure[counter].TMM_Mode = TMM_Mode_PWM;
//
TIMM_InitStructure[counter].TMM_CounterClear = TM_Clear_Match_TMGRA; //when TM is matched with TMGRA, TM0 is cleared
// TIMM_InitStructure[counter].TMM_Intp = TMM_Int_IMIA
; ///compare match interrupt enable A (IMIEA)
if
(
freq
>
2000
)
{
...
...
@@ -73,7 +86,7 @@ uint8_t TimerM_PWM_counter_Output_Init(TIMERM_PWM_Counter_en_t counter, uint16_t
// TIMM_InitStructure[counter].TMM_Clk = TMM_FCLK_Div8; // specify the operation clk of tim
// cycle_pulse[counter] = PWM_Clock / 8 / freq;
// }
else
if
(
freq
>=
50
)
else
if
(
freq
>=
50
)
{
TIMM_InitStructure
[
counter
].
TMM_Clk
=
TMM_FCLK_Div32
;
// specify the operation clk of tim
cycle_pulse
[
counter
]
=
PWM_Clock
/
32
/
freq
;
...
...
@@ -83,9 +96,7 @@ uint8_t TimerM_PWM_counter_Output_Init(TIMERM_PWM_Counter_en_t counter, uint16_t
return
1
;
}
TIMM_InitStructure
[
counter
].
TMM_CHA_Pulse
=
cycle_pulse
[
counter
]
&
0x0FFFF
;
//这里需要计算,调试下 period; //周期设置为period
TIMM_InitStructure
[
counter
].
TMM_CHA_Pulse
=
(
uint16_t
)(
cycle_pulse
[
counter
]
&
0x0FFFF
);
// 这里需要计算,调试�? period; //周期设置为period
// TMM_Init(&TIMM_InitStructure[counter]);
...
...
@@ -99,27 +110,40 @@ uint8_t TimerM_PWM_counter_Output_Init(TIMERM_PWM_Counter_en_t counter, uint16_t
// }
return
0
;
}
return
1
;
}
//uint8_t TimerM_PWM_counter_Output_Init(TIMERM_PWM_Counter_en_t counter, uint16_t freq)//, uint32_t PWM_Clock //SystemCoreClock
//
uint8_t TimerM_PWM_counter_Output_Init(TIMERM_PWM_Counter_en_t counter, uint16_t freq)//, uint32_t PWM_Clock //SystemCoreClock
//{
// SystemCoreClock = 64000000UL;
//
// if (counter == TIMERM_COUNTER0)
// {
// TIMM_InitStructure[counter].TMM_Select = TMM0;
//
// TIMM_InitStructure[counter].TMM_Channel = TMM_Channel_B|TMM_Channel_C|TMM_Channel_D;
// TIMM_InitStructure[counter].TMM_Mode = TMM_Mode_PWM;
// TIMM_InitStructure[counter].TMM_CounterClear = TM_Clear_Match_TMGRA; //when TM is matched with TMGRA, TM0 is cleared
// TIMM_InitStructure[counter].TMM_Intp = TMM_Int_IMIA; ///compare match interrupt enable A (IMIEA)
// }
// else if (counter == TIMERM_COUNTER1)
// {
// TIMM_InitStructure[counter].TMM_Select = TMM1;
// TIMM_InitStructure[counter].TMM_Channel = TMM_Channel_B;
// TIMM_InitStructure[counter].TMM_Mode = TMM_Mode_PWM;
// TIMM_InitStructure[counter].TMM_CounterClear = TM_Clear_Match_TMGRA; //when TM is matched with TMGRA, TM0 is cleared
// TIMM_InitStructure[counter].TMM_Intp = TMM_Int_IMIA; ///compare match interrupt enable A (IMIEA)
// }
// else
// {
// return 1;
// }
//
// TIMM_InitStructure[counter].TMM_Channel = TMM_Channel_A|TMM_Channel_B|TMM_Channel_C|TMM_Channel_D;
//
TIMM_InitStructure[counter].TMM_Mode = TMM_Mode_PWM;
// TIMM_InitStructure[counter].TMM_CounterClear = TM_Clear_Match_TMGRA; //when TM is matched with TMGRA, TM0 is cleared
// TIMM_InitStructure[counter].TMM_Intp = TMM_Int_IMIA; ///compare match interrupt enable A (IMIEA)
//
//
TIMM_InitStructure[counter].TMM_Channel = TMM_Channel_A|TMM_Channel_B|TMM_Channel_C|TMM_Channel_D;
//
// TIMM_InitStructure[counter].TMM_Mode = TMM_Mode_PWM;
//
//
TIMM_InitStructure[counter].TMM_CounterClear = TM_Clear_Match_TMGRA; //when TM is matched with TMGRA, TM0 is cleared
//
//
TIMM_InitStructure[counter].TMM_Intp = TMM_Int_IMIA; ///compare match interrupt enable A (IMIEA)
//
// if (freq > 2000)
// {
...
...
@@ -141,7 +165,7 @@ uint8_t TimerM_PWM_counter_Output_Init(TIMERM_PWM_Counter_en_t counter, uint16_t
// return 1;
// }
//
// TIMM_InitStructure[counter].TMM_CHA_Pulse = cycle_pulse[counter] & 0x0FFFF;//这里需要计算,调试
下
period; //周期设置为period
// TIMM_InitStructure[counter].TMM_CHA_Pulse = cycle_pulse[counter] & 0x0FFFF;//这里需要计算,调试
�?
period; //周期设置为period
//
//
//
...
...
@@ -159,8 +183,6 @@ uint8_t TimerM_PWM_counter_Output_Init(TIMERM_PWM_Counter_en_t counter, uint16_t
// return 0;
//}
/**
* @brief 设置timerM定时器x通道x的占空比
*
...
...
@@ -170,36 +192,41 @@ uint8_t TimerM_PWM_counter_Output_Init(TIMERM_PWM_Counter_en_t counter, uint16_t
* @param ActiveLevel 0负占空比 1正占空比
* @return uint8_t 返回0成功,非0失败
*/
uint8_t
TimerM_PWM_CH_Output_init
(
TIMERM_PWM_Counter_en_t
counter
,
TIMERM_PWM_Channel_en_t
ch
,
TIMERM_PWM_ActiveLevel_en_t
ActiveLevel
)
uint8_t
TimerM_PWM_CH_Output_init
(
TIMERM_PWM_Counter_en_t
counter
,
TIMERM_PWM_Channel_en_t
ch
,
TIMERM_PWM_ActiveLevel_en_t
ActiveLevel
)
{
GPIO_InitTypeDef
GPIO_InitStruct
;
if
((
counter
<
0
)
||
(
counter
>=
TIMERM_COUNTER_MAX
))
{
return
1
;
}
else
{
switch
(
ch
)
{
case
TIMERM_CHB
:
TIMM_InitStructure
[
counter
].
TMM_CHB_Pulse
=
((
cycle_pulse
[
counter
])
)
&
0x0FFFF
;
//TM计数达到TMGRB. 占空比
:duty2/period
TIMM_InitStructure
[
counter
].
TMM_CHB_Pulse
=
(
uint16_t
)(
cycle_pulse
[
counter
]
&
0x0FFFF
);
// TM计数达到TMGRB. 占空�?
:duty2/period
TIMM_InitStructure
[
counter
].
TMM_PWM
.
TMM_CHB
.
TMM_PWMInitLevel
=
TMM_PWMInitLevel_High
;
TIMM_InitStructure
[
counter
].
TMM_PWM
.
TMM_CHB
.
TMM_PWMActiveLevel
=
ActiveLevel
;
TIMM_InitStructure
[
counter
].
TMM_PWM
.
TMM_CHB
.
TMM_PWMActiveLevel
=
(
uint8_t
)
ActiveLevel
;
if
(
counter
==
TIMERM_COUNTER0
)
{
GPIO_PinAFConfig
(
GPIO_PORT1
,
GPIO_Pin_4
,
GPIO_P14
,
GROUP_AF_ODEFAULT
);
//
P14 used as TMIOB0 output(default function)
GPIO_InitStruct
.
GPIO_Pin
=
GPIO_Pin_4
;
GPIO_PinAFConfig
(
GPIO_PORT1
,
GPIO_Pin_4
,
GPIO_P14
,
GROUP_AF_ODEFAULT
);
//
P14 used as TMIOB0 output(default function)
GPIO_InitStruct
.
GPIO_Pin
=
GPIO_Pin_4
;
}
else
if
(
counter
==
TIMERM_COUNTER1
)
{
GPIO_PinAFConfig
(
GPIO_PORT1
,
GPIO_Pin_0
,
GPIO_P10
,
GROUP_AF_ODEFAULT
);
//
P14 used as TMIOB1 output(default function)
GPIO_InitStruct
.
GPIO_Pin
=
GPIO_Pin_0
;
GPIO_PinAFConfig
(
GPIO_PORT1
,
GPIO_Pin_0
,
GPIO_P10
,
GROUP_AF_ODEFAULT
);
//
P14 used as TMIOB1 output(default function)
GPIO_InitStruct
.
GPIO_Pin
=
GPIO_Pin_0
;
}
break
;
case
TIMERM_CHC
:
TIMM_InitStructure
[
counter
].
TMM_CHC_Pulse
=
((
cycle_pulse
[
counter
])
)
&
0x0FFFF
;
//TM计数达到TMGRC. 占空比
:duty2/period
TIMM_InitStructure
[
counter
].
TMM_CHC_Pulse
=
(
uint16_t
)(
cycle_pulse
[
counter
]
&
0x0FFFF
);
// TM计数达到TMGRC. 占空�?
:duty2/period
TIMM_InitStructure
[
counter
].
TMM_PWM
.
TMM_CHC
.
TMM_PWMInitLevel
=
TMM_PWMInitLevel_High
;
TIMM_InitStructure
[
counter
].
TMM_PWM
.
TMM_CHC
.
TMM_PWMActiveLevel
=
ActiveLevel
;
if
(
counter
==
TIMERM_COUNTER0
)
{
GPIO_PinAFConfig
(
GPIO_PORT1
,
GPIO_Pin_6
,
GPIO_P16
,
GROUP_AF_ODEFAULT
);
//
P16 used as TMIOC0 output(default function)
GPIO_PinAFConfig
(
GPIO_PORT1
,
GPIO_Pin_6
,
GPIO_P16
,
GROUP_AF_ODEFAULT
);
//
P16 used as TMIOC0 output(default function)
GPIO_InitStruct
.
GPIO_Pin
=
GPIO_Pin_6
;
}
else
if
(
counter
==
TIMERM_COUNTER1
)
...
...
@@ -209,13 +236,13 @@ uint8_t TimerM_PWM_CH_Output_init(TIMERM_PWM_Counter_en_t counter, TIMERM_PWM_Ch
break
;
case
TIMERM_CHD
:
TIMM_InitStructure
[
counter
].
TMM_CHD_Pulse
=
((
cycle_pulse
[
counter
])
)
&
0x0FFFF
;
//TM计数达到TMGRD. 占空比
:duty3/period
TIMM_InitStructure
[
counter
].
TMM_PWM
.
TMM_CHD
.
TMM_PWMInitLevel
=
TMM_PWMInitLevel_High
;
//
TMM_PWMInitLevel_High;//
TIMM_InitStructure
[
counter
].
TMM_PWM
.
TMM_CHD
.
TMM_PWMActiveLevel
=
ActiveLevel
;
//
TMM_PWMActiveLevel_Low;//TMM_PWMActiveLevel_High;//
TIMM_InitStructure
[
counter
].
TMM_CHD_Pulse
=
(
uint16_t
)(
cycle_pulse
[
counter
]
&
0x0FFFF
);
// TM计数达到TMGRD. 占空�?
:duty3/period
TIMM_InitStructure
[
counter
].
TMM_PWM
.
TMM_CHD
.
TMM_PWMInitLevel
=
TMM_PWMInitLevel_High
;
//
TMM_PWMInitLevel_High;//
TIMM_InitStructure
[
counter
].
TMM_PWM
.
TMM_CHD
.
TMM_PWMActiveLevel
=
ActiveLevel
;
//
TMM_PWMActiveLevel_Low;//TMM_PWMActiveLevel_High;//
if
(
counter
==
TIMERM_COUNTER0
)
{
GPIO_PinAFConfig
(
GPIO_PORT1
,
GPIO_Pin_7
,
GPIO_P17
,
GROUP_AF_TMIOD0
);
//
P15 used as TMIOD0 output(default function)
GPIO_InitStruct
.
GPIO_Pin
=
GPIO_Pin_7
;
GPIO_PinAFConfig
(
GPIO_PORT1
,
GPIO_Pin_7
,
GPIO_P17
,
GROUP_AF_TMIOD0
);
//
P15 used as TMIOD0 output(default function)
GPIO_InitStruct
.
GPIO_Pin
=
GPIO_Pin_7
;
}
else
if
(
counter
==
TIMERM_COUNTER1
)
{
...
...
@@ -225,16 +252,23 @@ uint8_t TimerM_PWM_CH_Output_init(TIMERM_PWM_Counter_en_t counter, TIMERM_PWM_Ch
default:
return
1
;
//
break;
//
break;
}
TMM_Init
(
&
TIMM_InitStructure
[
counter
]);
GPIO_InitStruct
.
GPIO_Mode
=
GPIO_Mode_OUT
;
GPIO_InitStruct
.
GPIO_Level
=
GPIO_Level_LOW
;
GPIO_InitStruct
.
GPIO_OType
=
GPIO_OType_PP
;
GPIO_InitStruct
.
GPIO_PuPd
=
GPIO_PuPd_NOPULL
;
GPIO_Init
(
GPIO_PORT1
,
&
GPIO_InitStruct
);
GPIO_Init
(
GPIO_PORT1
,
&
GPIO_InitStruct
);
if
((
counter
<
0
)
||
(
counter
>=
TIMERM_COUNTER_MAX
))
{
return
1
;
}
else
{
TMM_Init
(
&
TIMM_InitStructure
[
counter
]);
}
if
(
counter
==
TIMERM_COUNTER0
)
{
...
...
@@ -251,16 +285,16 @@ uint8_t TimerM_PWM_CH_Output_init(TIMERM_PWM_Counter_en_t counter, TIMERM_PWM_Ch
high_level_Pulse
[
counter
][
ch
]
=
((
cycle_pulse
[
counter
])
)
&
0x0FFFF
;
high_level_Pulse
[
counter
][
ch
]
=
((
cycle_pulse
[
counter
])
)
&
0x0FFFF
;
pwm_duty
[
counter
][
ch
]
=
1000
;
return
0
;
}
return
1
;
}
extern
void
TMM0_Set_Counter
(
uint8_t
ch
,
uint16_t
value
);
extern
void
TMM1_Set_Counter
(
uint8_t
ch
,
uint16_t
value
);
extern
void
TMM0_Set_Counter
(
uint8_t
ch
,
uint16_t
value
);
extern
void
TMM1_Set_Counter
(
uint8_t
ch
,
uint16_t
value
);
/**
* @brief 改变TimerM PWM输出的占空比
*
...
...
@@ -269,8 +303,14 @@ extern void TMM1_Set_Counter(uint8_t ch,uint16_t value);
* @param duty 占空比 千分之一
* @return uint8_t 返回0成功,非0失败
*/
uint8_t
TimerM_PWM_set_duty
(
TIMERM_PWM_Counter_en_t
counter
,
TIMERM_PWM_Channel_en_t
ch
,
uint16_t
duty
)
uint8_t
TimerM_PWM_set_duty
(
TIMERM_PWM_Counter_en_t
counter
,
TIMERM_PWM_Channel_en_t
ch
,
uint16_t
duty
)
{
if
((
counter
<
0
)
||
(
counter
>=
TIMERM_COUNTER_MAX
))
{
return
1
;
}
else
{
if
(
duty
>=
1000
)
{
duty
=
0
;
...
...
@@ -283,12 +323,12 @@ uint8_t TimerM_PWM_set_duty(TIMERM_PWM_Counter_en_t counter, TIMERM_PWM_Channel_
if
(
counter
==
TIMERM_COUNTER0
)
{
high_level_Pulse
[
counter
][
ch
]
=
(((
cycle_pulse
[
counter
]
*
duty
)
/
1000
)
&
0x0FFFF
);
TMM0_Set_Counter
(
1
<<
(
ch
+
1
),
high_level_Pulse
[
counter
][
ch
]
);
TMM0_Set_Counter
(
1
<<
(
ch
+
1
),
(
uint16_t
)(
high_level_Pulse
[
counter
][
ch
]
&
0x0FFFF
)
);
}
else
if
(
counter
==
TIMERM_COUNTER1
)
{
high_level_Pulse
[
counter
][
ch
]
=
(((
cycle_pulse
[
counter
]
*
duty
)
/
1000
)
&
0x0FFFF
);
TMM1_Set_Counter
(
1
<<
(
ch
+
1
),
high_level_Pulse
[
counter
][
ch
]
);
TMM1_Set_Counter
(
1
<<
(
ch
+
1
),
(
uint16_t
)(
high_level_Pulse
[
counter
][
ch
]
&
0x0FFFF
)
);
}
else
{
...
...
@@ -297,6 +337,8 @@ uint8_t TimerM_PWM_set_duty(TIMERM_PWM_Counter_en_t counter, TIMERM_PWM_Channel_
pwm_duty
[
counter
][
ch
]
=
duty
;
return
0
;
}
return
1
;
}
/**
...
...
@@ -310,9 +352,14 @@ uint8_t TimerM_PWM_set_duty(TIMERM_PWM_Counter_en_t counter, TIMERM_PWM_Channel_
* 如果不在一个频率区间就需要使用TimerM_PWM_set_freq来不优雅的切换频率,
* 如果看不懂注释也使用TimerM_PWM_set_freq来切换频率。
*/
uint8_t
TimerM_PWM_set_freq
(
TIMERM_PWM_Counter_en_t
counter
,
uint16_t
freq
)
uint8_t
TimerM_PWM_set_freq
(
TIMERM_PWM_Counter_en_t
counter
,
uint16_t
freq
)
{
if
(
counter
<
TIMERM_COUNTER_MAX
)
if
((
counter
<
0
)
||
(
counter
>=
TIMERM_COUNTER_MAX
))
{
return
1
;
}
else
{
if
(
freq
>
2000
)
{
...
...
@@ -324,7 +371,7 @@ uint8_t TimerM_PWM_set_freq(TIMERM_PWM_Counter_en_t counter, uint16_t freq )
// TIMM_InitStructure[counter].TMM_Clk = TMM_FCLK_Div8; // specify the operation clk of tim
// cycle_pulse[counter] = SystemCoreClock / 8 / freq;
// }
else
if
(
freq
>=
50
)
else
if
(
freq
>=
50
)
{
TIMM_InitStructure
[
counter
].
TMM_Clk
=
TMM_FCLK_Div32
;
// specify the operation clk of tim
cycle_pulse
[
counter
]
=
SystemCoreClock
/
32
/
freq
;
...
...
@@ -334,24 +381,20 @@ uint8_t TimerM_PWM_set_freq(TIMERM_PWM_Counter_en_t counter, uint16_t freq )
return
1
;
}
}
else
{
return
1
;
}
high_level_Pulse
[
counter
][
TIMERM_CHB
]
=
(((
cycle_pulse
[
counter
]
*
pwm_duty
[
counter
][
TIMERM_CHB
])
/
1000
)
&
0x0FFFF
);
high_level_Pulse
[
counter
][
TIMERM_CHC
]
=
(((
cycle_pulse
[
counter
]
*
pwm_duty
[
counter
][
TIMERM_CHC
])
/
1000
)
&
0x0FFFF
);
high_level_Pulse
[
counter
][
TIMERM_CHD
]
=
(((
cycle_pulse
[
counter
]
*
pwm_duty
[
counter
][
TIMERM_CHD
])
/
1000
)
&
0x0FFFF
);
TIMM_InitStructure
[
counter
].
TMM_CHB_Pulse
=
high_level_Pulse
[
counter
][
TIMERM_CHB
]
;
TIMM_InitStructure
[
counter
].
TMM_CHC_Pulse
=
high_level_Pulse
[
counter
][
TIMERM_CHC
]
;
TIMM_InitStructure
[
counter
].
TMM_CHD_Pulse
=
high_level_Pulse
[
counter
][
TIMERM_CHD
]
;
TIMM_InitStructure
[
counter
].
TMM_CHB_Pulse
=
(
uint16_t
)(
high_level_Pulse
[
counter
][
TIMERM_CHB
]
&
0x0FFFF
)
;
TIMM_InitStructure
[
counter
].
TMM_CHC_Pulse
=
(
uint16_t
)(
high_level_Pulse
[
counter
][
TIMERM_CHC
]
&
0x0FFFF
)
;
TIMM_InitStructure
[
counter
].
TMM_CHD_Pulse
=
(
uint16_t
)(
high_level_Pulse
[
counter
][
TIMERM_CHD
]
&
0x0FFFF
)
;
TIMM_InitStructure
[
counter
].
TMM_CHA_Pulse
=
(
uint16_t
)(
cycle_pulse
[
counter
]
&
0x0FFFF
);
TIMM_InitStructure
[
counter
].
TMM_CHA_Pulse
=
cycle_pulse
[
counter
]
&
0x0FFFF
;
if
((
counter
<
TIMERM_COUNTER_MAX
)
&&
(
counter
>=
TIMERM_COUNTER0
))
{
TMM_Init
(
&
TIMM_InitStructure
[
counter
]);
}
if
(
counter
==
TIMERM_COUNTER0
)
{
...
...
@@ -362,10 +405,11 @@ uint8_t TimerM_PWM_set_freq(TIMERM_PWM_Counter_en_t counter, uint16_t freq )
TMM1_Start
(
ENABLE
);
}
return
0
;
}
return
1
;
}
uint8_t
TimerM_PWM_set_freq2
(
TIMERM_PWM_Counter_en_t
counter
,
uint16_t
freq
)
uint8_t
TimerM_PWM_set_freq2
(
TIMERM_PWM_Counter_en_t
counter
,
uint16_t
freq
)
{
if
(
counter
==
TIMERM_COUNTER0
)
{
...
...
@@ -373,10 +417,10 @@ uint8_t TimerM_PWM_set_freq2(TIMERM_PWM_Counter_en_t counter, uint16_t freq )
high_level_Pulse
[
counter
][
TIMERM_CHB
]
=
(((
cycle_pulse
[
counter
]
*
pwm_duty
[
counter
][
TIMERM_CHB
])
/
1000
)
&
0x0FFFF
);
high_level_Pulse
[
counter
][
TIMERM_CHC
]
=
(((
cycle_pulse
[
counter
]
*
pwm_duty
[
counter
][
TIMERM_CHC
])
/
1000
)
&
0x0FFFF
);
high_level_Pulse
[
counter
][
TIMERM_CHD
]
=
(((
cycle_pulse
[
counter
]
*
pwm_duty
[
counter
][
TIMERM_CHD
])
/
1000
)
&
0x0FFFF
);
TMM0_Set_Counter
(
1
<<
1
,
high_level_Pulse
[
counter
][
TIMERM_CHB
]
);
TMM0_Set_Counter
(
1
<<
2
,
high_level_Pulse
[
counter
][
TIMERM_CHC
]
);
TMM0_Set_Counter
(
1
<<
3
,
high_level_Pulse
[
counter
][
TIMERM_CHD
]
);
TMM0_Set_Counter
(
1
,
cycle_pulse
[
counter
]
);
TMM0_Set_Counter
(
1
<<
1
,
(
uint16_t
)(
high_level_Pulse
[
counter
][
TIMERM_CHB
]
&
0x0FFFF
)
);
TMM0_Set_Counter
(
1
<<
2
,
(
uint16_t
)(
high_level_Pulse
[
counter
][
TIMERM_CHC
]
&
0x0FFFF
)
);
TMM0_Set_Counter
(
1
<<
3
,
(
uint16_t
)(
high_level_Pulse
[
counter
][
TIMERM_CHD
]
&
0x0FFFF
)
);
TMM0_Set_Counter
(
1
,
(
uint16_t
)(
cycle_pulse
[
counter
]
&
0x0FFFF
)
);
}
else
if
(
counter
==
TIMERM_COUNTER1
)
{
...
...
@@ -384,10 +428,10 @@ uint8_t TimerM_PWM_set_freq2(TIMERM_PWM_Counter_en_t counter, uint16_t freq )
high_level_Pulse
[
counter
][
TIMERM_CHB
]
=
(((
cycle_pulse
[
counter
]
*
pwm_duty
[
counter
][
TIMERM_CHB
])
/
1000
)
&
0x0FFFF
);
high_level_Pulse
[
counter
][
TIMERM_CHC
]
=
(((
cycle_pulse
[
counter
]
*
pwm_duty
[
counter
][
TIMERM_CHC
])
/
1000
)
&
0x0FFFF
);
high_level_Pulse
[
counter
][
TIMERM_CHD
]
=
(((
cycle_pulse
[
counter
]
*
pwm_duty
[
counter
][
TIMERM_CHD
])
/
1000
)
&
0x0FFFF
);
TMM1_Set_Counter
(
1
<<
1
,
high_level_Pulse
[
counter
][
TIMERM_CHB
]
);
TMM1_Set_Counter
(
1
<<
2
,
high_level_Pulse
[
counter
][
TIMERM_CHC
]
);
TMM1_Set_Counter
(
1
<<
3
,
high_level_Pulse
[
counter
][
TIMERM_CHD
]
);
TMM1_Set_Counter
(
1
,
cycle_pulse
[
counter
]
);
TMM1_Set_Counter
(
1
<<
1
,
(
uint16_t
)(
high_level_Pulse
[
counter
][
TIMERM_CHB
]
&
0x0FFFF
)
);
TMM1_Set_Counter
(
1
<<
2
,
(
uint16_t
)(
high_level_Pulse
[
counter
][
TIMERM_CHC
]
&
0x0FFFF
)
);
TMM1_Set_Counter
(
1
<<
3
,
(
uint16_t
)(
high_level_Pulse
[
counter
][
TIMERM_CHD
]
&
0x0FFFF
)
);
TMM1_Set_Counter
(
1
,
(
uint16_t
)(
cycle_pulse
[
counter
]
&
0x0FFFF
)
);
}
else
{
...
...
@@ -395,11 +439,8 @@ uint8_t TimerM_PWM_set_freq2(TIMERM_PWM_Counter_en_t counter, uint16_t freq )
}
return
0
;
}
void
TimerM_PWM_Init
(
void
)
{
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment