📄 wnt10.c
字号:
while( AD0INT == 0 ); // Wait for Convert Over
AdcDatBuff.ucVAR[0] = ADC0H; // Only Get High 8 Byte.
ExSramWrRdAdr = VocCh1RecDatWrPtr;
*ExSramWrRdAdr = AdcDatBuff.ucVAR[0]; // Save CH1 DATA.
VocCh1RecDatWrPtr++;
if( VocCh1RecDatWrPtr >= VocRecDatLength )
{ // 64000 Sample Points / Page( 8sec ).
VocCh1RecDatWrPtr = 0; // RST Address.
VocCh1RecDatWrPag++; // CH1 SRAM Page Number Increase 1.
}
if( VocCh1RecDatWrPag > VocCh1RecEndPag )
{ // Voice CH1 Record Over.
VocCh1RecDatWrPtr = 0;
VocCh1RecDatWrPag = 3;
VocCh1RecSTA = 0; // Clear Voice CH1 Record STATUS Flag.
VocCh1RecEvt = 1; // Set Voice Record CH1 Over Event Flag.
}
}
// VOICE CHANNAL 2 RECORDING.
if( VocCh2RecSTA == 1 )
{
ExSRAM_PageSetting( VocCh2RecDatWrPag );// Page 5 ~ 6.
ADC0_CH_Setting(0x00); // AIN02,voice channal 2.
AD0INT = 0; // RST ADC Convert Complete Flag.
AD0BUSY = 1; // Start ADC0
while( AD0INT == 0 ); // Wait for Convert Over
AdcDatBuff.ucVAR[0] = ADC0H; // Only Get High 8 Byte.
ExSramWrRdAdr = VocCh2RecDatWrPtr;
*ExSramWrRdAdr = AdcDatBuff.ucVAR[0]; // Save CH2 DATA.
VocCh2RecDatWrPtr++;
if( VocCh2RecDatWrPtr >= VocRecDatLength )
{ // 64000 Sample Points / Page( 8sec ).
VocCh2RecDatWrPtr = 0; // RST Address.
VocCh2RecDatWrPag++; // CH2 SRAM Page Number Increase 1.
}
if( VocCh2RecDatWrPag > VocCh2RecEndPag )
{ // Voice CH2 Record Over.
VocCh2RecDatWrPtr = 0;
VocCh2RecDatWrPag = 5;
VocCh2RecSTA = 0; // Clear Voice CH2 Record STATUS Flag.
VocCh2RecEvt = 1; // Set Voice Record CH2 Over Event Flag.
}
}
if( VocPlaySTA == 1 ) // DAC0 Task: Play Voice Sample.
{
ExSRAM_PageSetting(7);
DacDatBuff.uiVAR = 0;
ExSramWrRdAdr = VocSamDatRdPtr;
DacDatBuff.ucVAR[0] = *ExSramWrRdAdr;
DacDatBuff.uiVAR = DacDatBuff.uiVAR >> 2; // Vmax / 4 = 0.6V(Vpp).
// DacDatBuff.ucVAR = DacDatBuff.ucVAR & 0x7f80;
SFRPAGE = DAC0_PAGE; // Switch to DAC0 Page
DAC0L = DacDatBuff.ucVAR[1]; // DAC0 DATA Low Byte.
DAC0H = DacDatBuff.ucVAR[0]; // DAC0 DATA High Byte.
VocSamDatRdPtr++;
if( VocSamDatRdPtr >= VocSamPlyLength )
{
VocSamDatRdPtr = 0;
VocRePlyTimCNT++;
}
if( VocRePlyTimCNT >= VocSamRePlayTim )
{
VocSamDatRdPtr = 0;
VocRePlyTimCNT = 0;
VocPlaySTA = 0; // Voice Play Over.
}
}
uiTimCNT++; // 1S Counting.
if( uiTimCNT >= 8000 ) // Second Time Base.
{
uiTimCNT = 0; // .
SecFlag = 1; // Second Signal.
}
SFRPAGE = 0x0F; // P4 Page.
P4 = CurrSramPage; // Restore P4 Value.
SFRPAGE = 0x00;
}
void PwrCtrl(unsigned char ucMode)
{
switch( ucMode )
{
case 0: // System Power On Init.
SW0 = CarON; // Backup Battary Switch Enabled / Disabled.
SW8 = 0; // Fans' Power Enabled(MTD2955).
nPDN = 0; // MobilePhone Battary Enabled,"Low" is Active;(0)
LED0 = 1; // System Power's STADUS (0)
LED1 = 0; // Communicating with the Control Centerl (1)
LED2 = 0; // GPS's STADUS (1)
LED3 = 0; // MobilePhone 1's STADUS (1)
LED4 = 0; // MobilePhone 2's STADUS (1)
LED5 = 0; // MobilePhone 3's STADUS (1)
break;
case 1: // System Normal Operating.
MCU_STATUS = MCU_STATUS | 0x70; // Open TestMobilePhone Charging.
Ref_Init(1); // Internal Voltage Refernce Init
ADC0_Init(1,0,4,0,1,4,1); // ADC0 Enabled,GAIN: 1,HVA Enabled, GAIN: 0.25.
T1_RunCtrl(1); // T1 Running for UART1 BaudRate.
T3_RunCtrl(1); // T3 Running for DAC0 DATA Refresh.
T4_RunCtrl(1); // T4 Running for UART0 BaudRate.
SW0 = 0; // Switch On Backup Battary Switch.
SW3 = 1; // Analog Power Enabled(TPS76350).
SW2 = 1; // GPS Power Enabled(TPS76350).
SW1 = 0; // DigiPower(VCC) Enabled(MTD2955).
DmS(10); // delay 10mS.
nRST386 = 0; // Reset the Ex386.
DmS(10); // delay 10mS.
nRST386 = 1; // 386Ex Normal Operation.
DAC0_Init(1,1,7); // Timer 3, Left-Justified.
DAC1_Init(1,0,7); // Sync with Write to DAC1H.
SFRPAGE = DAC0_PAGE;
DAC0L = 0xff;
DAC0H = 0xff; // DCA1 Output: 1/2 Vref.
SFRPAGE = DAC1_PAGE;
DAC1L = 0x00;
DAC1H = 0x80; // DCA1 Output: 1/2 Vref.
SFRPAGE = 0x00;
break;
case 2: // System Standby.
Ref_Init(0); // Disable Internal Voltage Refernce.
ADC0_Init(0,0,4,0,0,4,1); // ADC0 Disabled,HVA Disabled.
DAC0_Init(0,1,7); // DAC0 Disabled.
DAC1_Init(0,0,7); // DAC1 Disabled.
SW0 = CarON; // Switch Off Backup Battary Switch.
SW3 = 0; // Analog Power Disabled(TPS76350).
SW2 = 0; // GPS Power Disabled(TPS76350).
SW1 = 1; // DigiPower(VCC) Disabled(MTD2955).
T1_RunCtrl(0); // Disable T1(UART1 BaudRate).
T3_RunCtrl(0); // Disable T3(DAC0 DATA Refresh).
T4_RunCtrl(0); // Disable T4(UART0 BaudRate).
break;
default: break;
}
}
void main(void)
{
unsigned char i,j,ucTMP;
unsigned char idata ucDATA[10];
unsigned char idata SysTemp,BattVolt,ExPwrVolt;
unsigned char idata SecCNT,MinCNT,ExPwrChgCNT;
unsigned char idata ReTxTimCNT;
unsigned char idata BattAlmVldCNT,BattNrlVldCNT;
unsigned char idata TempAlmVldCNT,TempNrlVldCNT;
unsigned int idata ExPwrAlmVldCNT; // 15min = 900S.
unsigned char idata ExPwrNrlVldCNT; // 30S Affirm.
unsigned char idata ExPwrOnTimCNT; // 30S Affirm.
unsigned char idata Ex386PwrOffCNT;
unsigned char idata PwrLedCNT, PwrLedOn, PwrLedOff;
unsigned char idata MC35LedCNT,MC35LedOn,MC35LedOff;
unsigned char idata MP0LedCNT, MP0LedOn, MP0LedOff;
unsigned char idata MP1LedCNT, MP1LedOn, MP1LedOff;
unsigned char idata MP2LedCNT, MP2LedOn, MP2LedOff;
unsigned char xdata *VocSamDatWrAdr; //
unsigned char xdata *VocRecDatRdAdr; //
unsigned char VocChnDatTxTimCNT = 0; // Voice CHn Record DATA TX Time Counting.
unsigned char RecChnTxDlyCNT = 0;
EA = 0;
SP = 0xC0; // SP: 64 Bytes,0xC0~0xff, User: 192 Bytes.
WDT_Disabled(); // WatchDog Disabled.
Port_Init(); // I/O Port and EMIF Config.
SW0 = CarON; // Backup Battary Switch Enabled(MTD2955).
SW7 = 1; // Battary Charge Enabled,Begin of Charging...
BattChgSTA = 1; // Battary Charging Now.
PwrCtrl(0); // System Power On Init.
External_Osc(); // Switch to External Oscillator, 24.000MHz.
RstSTATUS(); // Get MCU Reset Record.
if( ChkExSRAM() )
{
for(i=0;i<10;i++)
{
LED0 = 1;
DmS(50);
LED0 = 0;
D1S(1);
}
}
TstLED(); // Panal LED SelfTest.
FraFormat();
T0T1_Init(); // T0、T1 Init, T0: 1mS Interrupt, T1: 19200 BaudRate.
T3_Init(); // DAC0 DATA Refresh Timer.
T4_Init(); // UART0 Baudrate.
T0_RunCtrl(1); // T0 Running: 125uS.
UART0_Init(); // UART0 Init: 19200bps.
UART1_Init(); // UART1 Init: 19200bps.
uiTimCNT = 0; // RST 1S Counter.
PwrLedCNT = 0; // RST PwrLED counter.
PwrLedOn = 1; // System Standby LED LightOn: 1S.
PwrLedOff = 6; // System Standby LED LightOnOff Period: 6S.
MC35LedCNT = 0; // RST MC35 LED counter.
MP0LedCNT = 0; // RST MP1 LED counter.
MP1LedCNT = 0; // RST MP2 LED counter.
MP2LedCNT = 0; // RST MP3 LED counter.
ExPwrChgCNT = 0; // RST Power Change Status Counter.
BattAlmVldCNT = 0; // RST Battary Alarm Valid Counter.
BattNrlVldCNT = 0; // RST Battary Normal Valid Counter.
TempAlmVldCNT = 0; // RST Temp Alarm Valid Counter.
TempNrlVldCNT = 0; // RST Temp Normal Valid Counter.
ExPwrAlmVldCNT = 0; // RST ExPwr Alarm Valid Counter.
ExPwrNrlVldCNT = 0; // RST ExPwr Normal Valid Counter.
ReTxTimCNT = 0; // RST TX Pause to Resume Time Counter.
RxCurrFraIdx.uiVAR = 0;
RxLastFraIdx.uiVAR = 0;
TxRecFraIdx.uiVAR = 0;
ExPwrLastSTA = 1; // ExPwrSTATUS Initial.
Ex386STATUS = 0x00; // 386Ex Initial Value: 00 00 00 00.
Ex386StaChg = 1;
SysStandby = 1; // System Standby.
Interrupt_Init(); // System Interrupt Config.
WDT_Setting(0x04); // 651uS for 24.000MHz.
WDT_Reload(); // WDT Enabled.
EA = 1; // Global Enable 8051 interrupts.
while(1)
{
if( SysStandby == 1 )
SW0 = CarON; // Switch Off Backup Battary Switch.
/**************************************************************
P1: D7, D6, D5, D4, D3, D2, D1, D0
LED5,LED4,LED3,LED2,LED1,LED0,mPDN,SW8.
**************************************************************/
if( PwrLedCNT < PwrLedOn ) // Power Indicator LED.
P1 = P1 | 0x04; // LED0 Light On.
else
P1 = P1 & 0xfb; // LED0 Light Off.
if( MC35LedCNT < MC35LedOn ) // MC35 Indicator LED.
P1 = P1 | 0x08; // LED1(P1.3) Light On.
else
P1 = P1 & 0xf7; // LED1(P1.3) Light Off.
if( MP0LedCNT < MP0LedOn ) // MP0 Indicator LED.
P1 = P1 | 0x20; // LED3(P1.5) Light On.
else
P1 = P1 & 0xdf; // LED3(P1.5) Light Off.
if( MP1LedCNT < MP1LedOn ) // MP1 Indicator LED.
P1 = P1 | 0x40; // LED4(P1.6) Light On.
else
P1 = P1 & 0xbf; // LED4(P1.6) Light Off.
if( MP2LedCNT < MP2LedOn ) // MP2 Indicator LED.
P1 = P1 | 0x80; // LED5(P1.7) Light On.
else
P1 = P1 & 0x7f; // LED5(P1.7) Light Off.
if( PwrLedCNT >= PwrLedOff )
PwrLedCNT = 0;
if( MC35LedCNT >= MC35LedOff )
MC35LedCNT = 0;
if( MP0LedCNT >= MP0LedOff )
MP0LedCNT = 0;
if( MP1LedCNT >= MP1LedOff )
MP1LedCNT = 0;
if( MP2LedCNT >= MP2LedOff )
MP2LedCNT = 0;
/**************************************************************
*** SECOND FLAG VALID ***
**************************************************************/
if( SecFlag ) // Second TimOut flag.
{
SecCNT++;
if( SecCNT >= 60 ) // Minute flag.
{
MinFlag = 1; // Set minute flag.
SecCNT = 0; // RST secong counter.
}
if( Ex386PwrDwn == 1 )
Ex386PwrOffCNT++;
else
Ex386PwrOffCNT = 0;
PwrLedCNT++; // Power Indicator LED.
MC35LedCNT++; // MC35 Indicator LED.
MP0LedCNT++; // MP0 Indicator LED.
MP1LedCNT++; // MP1 Indicator LED.
MP2LedCNT++; // MP2 Indicator LED.
/**************************************************************
*** Get External Power STATUS & Refresh I/O ***
**************************************************************/
ExPwrCurrSTA = CarON; // Get Current ExPwr STATUS Every Second.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -