📄 复件 m62429.c
字号:
****************************************************************
*/
#include <intrins.h>
#include "type.h"
#include "m62429.h"
#include "gpio.h"
extern GPIO volatile xdata *gGpio;
extern VOID
WaitUs(
ULONG Us
);
#define REG_M62429_PORT_OUT gGpio->PortB.rGPIO_OUT
#define CTRL_M62429_PORT gGpio->PortB.rGPIO_OE
#define MASK_M62429_DATA 0x40
#define MASK_M62429_CLK 0x80
extern unsigned char gVolume;
void m62429_send_data(unsigned char att1, unsigned char att2)
{
unsigned char temp;
unsigned char i;
//get volume value
temp = 0x80;
temp += att1;
temp += (att2 << 5);
//init port
// SET_REG(CTRL_M62429_PORT, MASK_M62429_CLK | MASK_M62429_DATA);
// CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK | MASK_M62429_DATA);
gGpio->PortB.rGPIO_OE |= MASK_M62429_CLK;
gGpio->PortB.rGPIO_OE |= MASK_M62429_DATA;
gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_CLK);//CLK = 0;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_DATA);//DAT = 0;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
//send D0 and D1
// SET_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
gGpio->PortB.rGPIO_OUT |= MASK_M62429_DATA; //DAT = 1;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
// SET_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
gGpio->PortB.rGPIO_OUT |= MASK_M62429_CLK; //CLK = 1;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
// CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_DATA);//DAT = 0;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
// CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_CLK); // CLK = 0;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
// CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_DATA); //DAT = 0;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
// SET_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
gGpio->PortB.rGPIO_OUT |= MASK_M62429_CLK; //CLK = 1;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
// CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_DATA); //DAT = 0;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
// CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_CLK); // CLK = 0;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
//send D2 ~ D9
for (i = 0; i < 8; ++i)
{
if (temp & 0x01)
{
// SET_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
gGpio->PortB.rGPIO_OUT |= MASK_M62429_DATA; // DAT = 1;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
}
else
{
// CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_DATA); // DAT = 0;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
}
// SET_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
gGpio->PortB.rGPIO_OUT |= MASK_M62429_CLK; // CLK = 1;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
// CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_DATA); //DAT = 0;
_nop_();_nop_();_nop_();_nop_();
//_nop_();_nop_();_nop_();_nop_();
// CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_CLK); // CLK = 0;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
temp >>= 1;
}
//send D10
// SET_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
gGpio->PortB.rGPIO_OUT |= MASK_M62429_DATA; // DAT = 1;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
// SET_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
gGpio->PortB.rGPIO_OUT |= MASK_M62429_CLK; //CLK = 1;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
// CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_CLK); // CLK = 0;
_nop_();_nop_();_nop_();_nop_();
// _nop_();_nop_();_nop_();_nop_();
}
void SysVolumeAdd(void)
{
unsigned char temp;
temp = gVolume;
//max volume
if ((temp & 0x7f) == 0x75)
{
m62429_send_data(temp & 0x1f, (temp & 0x60) >> 5);
return;
}
else
{
if ((temp & 0x15) == 0x15)
{
temp += 0x20;
}
else
{
temp += 0x01;
}
}
m62429_send_data(temp & 0x1f, (temp & 0x60) >> 5);
gVolume = temp;
}
void SysVolumeSub(void)
{
unsigned char temp;
temp = gVolume;
//max volume
if ((temp & 0x7f) == 0x00)
{
m62429_send_data(temp & 0x1f, (temp & 0x60) >> 5);
return;
}
else
{
if ((temp & 0x15) == 0x00)
{
temp -= 0x20;
}
else
{
temp -= 0x01;
}
}
m62429_send_data(temp & 0x1f, (temp & 0x60) >> 5);
gVolume = temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -