whycyhl
2022-05-05 683c912f9ac1935a7b109fb402bb276dba450f6b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/************************** Copyright (c) **********************************
**                 FUZHOU FUGUANG ELECTRONICS Co.,LTD.
**                        ¸£Öݸ£¹âµç×ÓÓÐÏÞ¹«Ë¾
**                       http://www.fuguang.com
**
**-------------- File Info -------------------------------------------------
** File name:            M64PWM_Driver.c
** Last modified Date:  2008-11-16
** Last Version:        1.0
** Descriptions:        M64PWM Drivers lib
**
**--------------------------------------------------------------------------
** Created by:            mxpopstar
** Created date:        2008-11-16
** Version:                1.0
** Descriptions:        The original version
**
**--------------------------------------------------------------------------
** Modified by:            mxpopstar
** Modified date:        2008-11-20
** Version:
** Descriptions:        M64PWM Drivers lib
**
***************************************************************************/
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
#include    "M64PWM_Driver.h"
#include    <avr/wdt.h>
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
void InitIO_M64PWM(void)
{
    DDRE |= (1<<PE3)|(1<<PE4)|(1<<PE5);        //----ÅäÖÃOC3A,OC3BΪÊä³ö;
    PORTE &= ~((1<<PE3)|(1<<PE4)|(1<<PE5));    //----ʹOC3A,OC3BÊä³ö0;
    _delay_us(1);
}
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
void Config_M64PWM(void)
{
    TCCR3B |= (1<<WGM32)|(1<<WGM33);                    //----¼ÆÊýÆ÷3¹¤×÷ÔÚ¿ìËÙ8λPWM,³õʼ»¯ÎªÍ£Ö¹×´Ì¬,OC3BÊä³ö0;
    TCCR3A |= (1<<WGM31);                    //----±È½ÏÆ¥ÅäʱOC3A,OC3B¶ËÖÃλ
    OCR3A = 0x00;                            //----±È½ÏÖµÉèΪ0;ʹÊä³öÂö¿í×îС;
    OCR3B = 0x00;                            //----±È½ÏÖµÉèΪ0;ʹÊä³öÂö¿í×îС;
    OCR3C = 0x00;                            //----±È½ÏÖµÉèΪ0;ʹÊä³öÂö¿í×îС;
}
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
void Start_M64PWM1(void)
{
    InitIO_M64PWM();
    Config_M64PWM();
    TCCR3A |= (1<<COM3B1);
    TCCR3B |= 0x01;                    //----Æô¶¯¶¨Ê±Æ÷¹¤×÷
    ICR3 = 0x016f;//PWMƵÂÊÉèÖòÎÊý
    OCR3B = 10;
}
//----------------------------------------------------------------------------------
void Start_M64PWM2(void)
{
    TCCR3A |= (1<<COM3A1);
    OCR3A = 10;
}
//----------------------------------------------------------------------------------
void Start_M64PWM3(void)
{
    TCCR3A |= (1<<COM3C1);
    OCR3C = 10;    
}
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
void Stop_M64PWM(void)
{
    while(OCR3B > 0)
    {
        OCR3B--;
        wdt_reset();    //ι¹·
        _delay_ms(1);
    }
    while(OCR3A > 0)
    {
        OCR3A--; 
        wdt_reset();    //ι¹·
        _delay_ms(1);
    }
    while(OCR3C > 0)
    {
        OCR3C--; 
        wdt_reset();    //ι¹·
        _delay_ms(1);
    }
    
    OCR3A = 0x00;        //----±È½ÏÖµÉèΪ0;ʹÊä³öÂö¿í×îС;
    OCR3B = 0x00;        //----±È½ÏÖµÉèΪ0;ʹÊä³öÂö¿í×îС;
    OCR3C = 0x00;        //----±È½ÏÖµÉèΪ0;ʹÊä³öÂö¿í×îС;
    _delay_us(5);
    TCCR3B = 0x00;        //---Í£Ö¹¶¨Ê±Æ÷¹¤×÷,Í£Ö¹PWMÊä³ö
    TCCR3A = 0x00;
    _delay_us(5);
    InitIO_M64PWM();
}
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
void SetM64PWM1Value(const unsigned int value)
{
    OCR3B = value;
}
unsigned int GetM64PWM1Value(void)
{
    return OCR3B;
}
//
void SetM64PWM2Value(const unsigned int value)
{
    OCR3A = value;
}
unsigned int GetM64PWM2Value(void)
{
    return OCR3A;
}
void SetM64PWM3Value(const unsigned int value)
{
    OCR3C = value;
}
unsigned int GetM64PWM3Value(void)
{
    return OCR3C;
}
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------