📄 msp.c
字号:
/*******************************************************************************
MSP.C
Copyright (c) SmartASIC, Inc. All rights reserved.
*******************************************************************************/
#include <MTV230.H>
#include <DEFINE.H>
#define MSP345G 0x80
/*==============================================================================
==============================================================================*/
void MSP_IIC_Start(void) {
MSP_SDA=1;
MSP_SCL=1;
MSP_SDA=0;
MSP_SCL=0;
}
/*==============================================================================
==============================================================================*/
void MSP_IIC_Stop(void) {
MSP_SDA=0;
MSP_SCL=1;
MSP_SDA=1;
}
/*==============================================================================
==============================================================================*/
bit MSP_IIC_Data_In(unsigned char bytedata) {
unsigned char i;
bit ack;
for(i=0; i<8; i++) {
MSP_SDA=bytedata&0x80;
MSP_SCL=1;
bytedata<<=1;
MSP_SCL=0;
}
MSP_SDA=1;
do{//wait CLK release
MSP_SCL=1;
}while(!MSP_SCL);
ack=MSP_SDA;
MSP_SCL=0;
MSP_SDA=0;
return ack;
}
/*==============================================================================
==============================================================================*/
unsigned char MSP_IIC_Data_Out(void) {
unsigned char i, bytedata=0;
MSP_SDA=1;
for(i=0; i<8; i++) {
MSP_SCL=1;
bytedata<<=1;
bytedata|=MSP_SDA;
MSP_SCL=0;
}
return bytedata;
}
/*==============================================================================
==============================================================================*/
void MSP_Send_Acknowledge(bit ack) {
MSP_SDA=ack;
MSP_SCL=1;
MSP_SCL=0;
}
/*==============================================================================
==============================================================================*/
/*unsigned int MSP_Read_Control(void) {
unsigned char hbyte, lbyte;
Again:
MSP_IIC_Start();
if(MSP_IIC_Data_In(MSP345G))
goto Again;
if(MSP_IIC_Data_In(CONTROL))
goto Again;
MSP_IIC_Start();
if(MSP_IIC_Data_In(MSP345G|1))
goto Again;
hbyte=MSP_IIC_Data_Out();
MSP_Send_Acknowledge(1);
lbyte=MSP_IIC_Data_Out();
MSP_Send_Acknowledge(1);
MSP_IIC_Stop();
return (unsigned int)hbyte*0x100+(unsigned int)lbyte;
}*/
/*==============================================================================
==============================================================================*/
void MSP_Write_Control(unsigned int intdata) {
unsigned char hbyte, lbyte;
hbyte=intdata/0x100;
lbyte=intdata%0x100;
Again:
MSP_IIC_Start();
if(MSP_IIC_Data_In(MSP345G))
goto Again;
if(MSP_IIC_Data_In(CONTROL))
goto Again;
if(MSP_IIC_Data_In(hbyte))
goto Again;
if(MSP_IIC_Data_In(lbyte))
goto Again;
MSP_IIC_Stop();
}
/*==============================================================================
==============================================================================*/
unsigned int MSP_Read_Address(unsigned char subaddress, unsigned int address) {
unsigned char haddress, laddress, hbyte, lbyte;
haddress=address/0x100;
laddress=address%0x100;
Again:
MSP_IIC_Start();
if(MSP_IIC_Data_In(MSP345G))
goto Again;
if(MSP_IIC_Data_In(subaddress))
goto Again;
if(MSP_IIC_Data_In(haddress))
goto Again;
if(MSP_IIC_Data_In(laddress))
goto Again;
MSP_IIC_Start();
if(MSP_IIC_Data_In(MSP345G|1))
goto Again;
hbyte=MSP_IIC_Data_Out();
MSP_Send_Acknowledge(0);
lbyte=MSP_IIC_Data_Out();
MSP_Send_Acknowledge(1);
MSP_IIC_Stop();
return (unsigned int)hbyte*0x100+(unsigned int)lbyte;
}
/*==============================================================================
==============================================================================*/
void MSP_Write_Address(unsigned char subaddress, unsigned int address, unsigned int intdata) {
unsigned char haddress, laddress, hbyte, lbyte;
haddress=address/0x100;
laddress=address%0x100;
hbyte=intdata/0x100;
lbyte=intdata%0x100;
Again:
MSP_IIC_Start();
if(MSP_IIC_Data_In(MSP345G))
goto Again;
if(MSP_IIC_Data_In(subaddress))
goto Again;
if(MSP_IIC_Data_In(haddress))
goto Again;
if(MSP_IIC_Data_In(laddress))
goto Again;
if(MSP_IIC_Data_In(hbyte))
goto Again;
if(MSP_IIC_Data_In(lbyte))
goto Again;
MSP_IIC_Stop();
}
/*==============================================================================
==============================================================================*/
void MSP_Source_Select(unsigned int outport_addr,
unsigned int in_source,
unsigned int out_matrix) {
MSP_Write_Address(WR_DSP, outport_addr, in_source*0x100+out_matrix);
}
/*==============================================================================
==============================================================================*/
void MSP_SCART1_Source_Select(unsigned char scart_src) {
if(scart_src==1)
MSP_Write_Address(WR_DSP, 0x0013, 0x0000+0x0c00);//SCART1_IN->SCART ADC...SCART DAC-->SCART1_OUT
else
MSP_Write_Address(WR_DSP, 0x0013, 0x0000+0x0e00);//SCART2_IN->SCART ADC...SCART DAC-->SCART1_OUT
}
/*==============================================================================
==============================================================================*/
unsigned char Get_MTS_Mode(void) {
unsigned int mts;
unsigned char ret;
MSP_Write_Address(WR_DEM, 0x0020, 0x0020);//BTSC-Stereo
MSP_Write_Address(WR_DEM, 0x0030, 0x2003);//enable automatic detect
do{
mts=MSP_Read_Address(RD_DEM, 0x007e);
}while(mts>=0x7ff);
ret=0;
mts=MSP_Read_Address(RD_DEM, 0x0200);
if((mts&0x0100)==0x0100)
ret+=1;//SAP
if((mts&0x0040)==0x0040)
ret+=2;//STEREO
return ret;//0:MONO 1:MONO+SAP 2:MONO+STEREO 3:MONO+SAP+STEREO
}
/*==============================================================================
==============================================================================*/
void Set_MTS_Mode(unsigned char mts) {
MSP_Write_Address(WR_DEM, 0x0030, 0x2002);//disable automatic detect
//Real_MTS ==> 0:MONO 1:MONO+SAP 2:MONO+STEREO 3:MONO+SAP+STEREO
switch(mts) {
case(0)://MONO
if((Real_MTS==2)||(Real_MTS==3)) {
MSP_Write_Address(WR_DEM, 0x0020, 0x0020);//BTSC-Stereo
MSP_Write_Address(WR_DSP, 0x000e, 0x2403);//Sound A mono
}
else {
MSP_Write_Address(WR_DEM, 0x0020, 0x0021);//BTSC-mono+SAP
MSP_Write_Address(WR_DSP, 0x000e, 0x2403);//Sound A mono
}
break;
case(1)://SAP
if((Real_MTS==1)||(Real_MTS==3)) {
MSP_Write_Address(WR_DEM, 0x0020, 0x0021);//BTSC-mono+SAP
MSP_Write_Address(WR_DSP, 0x000e, 0x2404);//sound B mono
}
else {
if(Real_MTS==2)
MSP_Write_Address(WR_DEM, 0x0020, 0x0020);//BTSC-Stereo
else
MSP_Write_Address(WR_DEM, 0x0020, 0x0021);//BTSC-mono+SAP
MSP_Write_Address(WR_DSP, 0x000e, 0x2403);//Sound A mono
}
break;
case(2)://STEREO
if((Real_MTS==2)||(Real_MTS==3)) {
MSP_Write_Address(WR_DEM, 0x0020, 0x0020);//BTSC-Stereo
MSP_Write_Address(WR_DSP, 0x000e, 0x2402);//Korean (BTSC Stereo)
}
else {
MSP_Write_Address(WR_DEM, 0x0020, 0x0021);//BTSC-mono+SAP
MSP_Write_Address(WR_DSP, 0x000e, 0x2403);//Sound A mono
}
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -