diff --git a/README.md b/README.md index cf3dbec..dba54e6 100644 --- a/README.md +++ b/README.md @@ -35,12 +35,14 @@ KT06xx是KTMicro公司推出的VHF/UHF无线麦克风发射/接收芯片系列 ### KT0646M (I2C配置 UHF发射) - [(Datasheet) KT0646M_Datasheet_V1.3_CN.pdf](datasheets/KT0646M_Datasheet_V1.3_CN.pdf) + - [(Datasheet) KT0646M_Datasheet_V1.4.2_CN.pdf](datasheets/KT0646M_Datasheet_V1.4.2_CN.pdf) - [(APP Note) KT0646M_FAQ_中文版_V1.2.pdf](datasheets/KT0646M_FAQ_中文版_V1.2.pdf) - [51单片机示例代码](democode/KT0646M_demoboard) - [硬件工程示例](demohardware/KT0646M_demoboard) ### KT0656M (I2C配置 UHF接收) - [(Datasheet) KT0656M_datasheet_V0.7.8_CN.pdf](datasheets/KT0656M_datasheet_V0.7.8_CN.pdf) + - [(Datasheet) KT0656M_datasheet_V1.0.4_CN.pdf](datasheets/KT0656M_datasheet_V1.0.4_CN.pdf) - [(APP Note) KT0656M_FAQ_中文版_V1.0.pdf](datasheets/KT0656M_FAQ_中文版_V1.0.pdf) - [51单片机示例代码](democode/KT0656M_demoboard) @@ -52,3 +54,9 @@ KT06xx是KTMicro公司推出的VHF/UHF无线麦克风发射/接收芯片系列 ### KT0641(I2C配置 UHF发射 SDK同KT0646M) - [(Datasheet) KT0641_Datasheet_V1.0_CN.pdf](datasheets/KT0641_Datasheet_V1.0_CN.pdf) + +### KT1605(内置MCU UHF收发 1声道 5ms延迟) + - [(Datasheet) KT1605_datasheet_V0.3_CN.pdf](datasheets/KT1605_datasheet_V0.3_CN.pdf) + +### KT0607(内置MCU UHF收发 4声道 7ms延迟) + - [(Datasheet) KT1607_datasheet_V0.3_CN.pdf](datasheets/KT1607_datasheet_V0.3_CN.pdf) diff --git a/datasheets/KT0603_Datasheet_V1.1.pdf b/datasheets/KT0603_Datasheet_V1.1.pdf index b3cad3d..8b31d80 100644 Binary files a/datasheets/KT0603_Datasheet_V1.1.pdf and b/datasheets/KT0603_Datasheet_V1.1.pdf differ diff --git a/datasheets/KT0613_Datasheet_V1.1_CN.pdf b/datasheets/KT0613_Datasheet_V1.1_CN.pdf index 4a2c980..cf11226 100644 Binary files a/datasheets/KT0613_Datasheet_V1.1_CN.pdf and b/datasheets/KT0613_Datasheet_V1.1_CN.pdf differ diff --git "a/datasheets/KT0613_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" "b/datasheets/KT0613_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" index 86034bf..b9bec9f 100644 Binary files "a/datasheets/KT0613_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" and "b/datasheets/KT0613_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" differ diff --git a/datasheets/KT0616M_Datasheet_V1.1.pdf b/datasheets/KT0616M_Datasheet_V1.1.pdf index 9716199..2704f09 100644 Binary files a/datasheets/KT0616M_Datasheet_V1.1.pdf and b/datasheets/KT0616M_Datasheet_V1.1.pdf differ diff --git "a/datasheets/KT0616M_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" "b/datasheets/KT0616M_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" index 225eb2a..b575cd1 100644 Binary files "a/datasheets/KT0616M_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" and "b/datasheets/KT0616M_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" differ diff --git a/datasheets/KT0623_Datasheet_V1.0_CN.pdf b/datasheets/KT0623_Datasheet_V1.0_CN.pdf index 9020032..87e0336 100644 Binary files a/datasheets/KT0623_Datasheet_V1.0_CN.pdf and b/datasheets/KT0623_Datasheet_V1.0_CN.pdf differ diff --git "a/datasheets/KT0623_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" "b/datasheets/KT0623_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" index 7c064a2..ad66c4d 100644 Binary files "a/datasheets/KT0623_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" and "b/datasheets/KT0623_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" differ diff --git a/datasheets/KT0626M_Datasheet_V1.1.pdf b/datasheets/KT0626M_Datasheet_V1.1.pdf index f13340d..7dd16f5 100644 Binary files a/datasheets/KT0626M_Datasheet_V1.1.pdf and b/datasheets/KT0626M_Datasheet_V1.1.pdf differ diff --git "a/datasheets/KT0626M_FAQ_\344\270\255\346\226\207\347\211\210_V1.1.pdf" "b/datasheets/KT0626M_FAQ_\344\270\255\346\226\207\347\211\210_V1.1.pdf" index 6f681e4..1fb9ba3 100644 Binary files "a/datasheets/KT0626M_FAQ_\344\270\255\346\226\207\347\211\210_V1.1.pdf" and "b/datasheets/KT0626M_FAQ_\344\270\255\346\226\207\347\211\210_V1.1.pdf" differ diff --git a/datasheets/KT0641_Datasheet_V1.0_CN.pdf b/datasheets/KT0641_Datasheet_V1.0_CN.pdf index 34b3d56..3cdf050 100644 Binary files a/datasheets/KT0641_Datasheet_V1.0_CN.pdf and b/datasheets/KT0641_Datasheet_V1.0_CN.pdf differ diff --git a/datasheets/KT0642_Datasheet_V0.5_CN.pdf b/datasheets/KT0642_Datasheet_V0.5_CN.pdf index a3434b2..e9b5020 100644 Binary files a/datasheets/KT0642_Datasheet_V0.5_CN.pdf and b/datasheets/KT0642_Datasheet_V0.5_CN.pdf differ diff --git a/datasheets/KT0646M_Datasheet_V1.3_CN.pdf b/datasheets/KT0646M_Datasheet_V1.3_CN.pdf index 4612614..b7e3f44 100644 Binary files a/datasheets/KT0646M_Datasheet_V1.3_CN.pdf and b/datasheets/KT0646M_Datasheet_V1.3_CN.pdf differ diff --git a/datasheets/KT0646M_Datasheet_V1.4.2_CN.pdf b/datasheets/KT0646M_Datasheet_V1.4.2_CN.pdf new file mode 100644 index 0000000..5a5ccaf Binary files /dev/null and b/datasheets/KT0646M_Datasheet_V1.4.2_CN.pdf differ diff --git "a/datasheets/KT0646M_FAQ_\344\270\255\346\226\207\347\211\210_V1.2.pdf" "b/datasheets/KT0646M_FAQ_\344\270\255\346\226\207\347\211\210_V1.2.pdf" index 816cfd9..e7e8f36 100644 Binary files "a/datasheets/KT0646M_FAQ_\344\270\255\346\226\207\347\211\210_V1.2.pdf" and "b/datasheets/KT0646M_FAQ_\344\270\255\346\226\207\347\211\210_V1.2.pdf" differ diff --git a/datasheets/KT0651_datasheet_V0.1_CN.pdf b/datasheets/KT0651_datasheet_V0.1_CN.pdf index b9d8a90..9f2f36c 100644 Binary files a/datasheets/KT0651_datasheet_V0.1_CN.pdf and b/datasheets/KT0651_datasheet_V0.1_CN.pdf differ diff --git "a/datasheets/KT0656M_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" "b/datasheets/KT0656M_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" index 75b9b73..95fb385 100644 Binary files "a/datasheets/KT0656M_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" and "b/datasheets/KT0656M_FAQ_\344\270\255\346\226\207\347\211\210_V1.0.pdf" differ diff --git a/datasheets/KT0656M_datasheet_V0.7.8_CN.pdf b/datasheets/KT0656M_datasheet_V0.7.8_CN.pdf index b5810cb..fdf004d 100644 Binary files a/datasheets/KT0656M_datasheet_V0.7.8_CN.pdf and b/datasheets/KT0656M_datasheet_V0.7.8_CN.pdf differ diff --git a/datasheets/KT0656M_datasheet_V1.0.4_CN.pdf b/datasheets/KT0656M_datasheet_V1.0.4_CN.pdf new file mode 100644 index 0000000..4af5212 Binary files /dev/null and b/datasheets/KT0656M_datasheet_V1.0.4_CN.pdf differ diff --git a/datasheets/KT1605_datasheet_V0.3_CN.pdf b/datasheets/KT1605_datasheet_V0.3_CN.pdf new file mode 100644 index 0000000..ce1a4c1 Binary files /dev/null and b/datasheets/KT1605_datasheet_V0.3_CN.pdf differ diff --git a/datasheets/KT1607_datasheet_V0.3_CN.pdf b/datasheets/KT1607_datasheet_V0.3_CN.pdf new file mode 100644 index 0000000..1225cdd Binary files /dev/null and b/datasheets/KT1607_datasheet_V0.3_CN.pdf differ diff --git a/democode/KT0642_demoboard/i2c.c b/democode/KT0642_demoboard/i2c.c index 140bdfd..038824c 100644 --- a/democode/KT0642_demoboard/i2c.c +++ b/democode/KT0642_demoboard/i2c.c @@ -14,7 +14,7 @@ bit Ack_Flag=0; // I2C Ack Flag //------------------------------------------------------------------------------------ // Function PROTOTYPES //------------------------------------------------------------------------------------ -void I2C_Delay(void); // ɨLCDI2Cʱ +void I2C_Delay(void); // 扫键,LCD,I2C延时 void I2C_Start(void); void I2C_Senddata(uchar senddata); void I2C_Ack(void); @@ -147,7 +147,7 @@ uint I2C_Word_Read(uchar device_address, uchar reg_add) I2C_Ack(); if (Ack_Flag == 0) { -// SDA = 1;//SDA Ϊ룬 +// SDA = 1;//SDA 设为输入,读引脚 readdata_high = I2C_Receivedata(); SDA = 0; I2C_Delay();I2C_Delay(); diff --git a/democode/KT0642_demoboard/interface.h b/democode/KT0642_demoboard/interface.h index 168769b..afe9875 100644 --- a/democode/KT0642_demoboard/interface.h +++ b/democode/KT0642_demoboard/interface.h @@ -24,8 +24,8 @@ //#define DEMO_TX #ifdef C8051F314 -sbit SDA = P0^4; // P1.0SDA -sbit SCL = P0^5; // P1.0SCL +sbit SDA = P0^4; // 分配P1.0给SDA +sbit SCL = P0^5; // 分配P1.0给SCL sbit GPIO3 = P0^6; sbit GPIO2 = P0^7; sbit GPIO1 = P0^1; // Slave output, master input @@ -36,8 +36,8 @@ sbit NSS = P0^3; // SPI select #endif #ifdef C8051F340 -sbit SDA = P3^0; // P3.0SDA -sbit SCL = P2^7; // P2.7SCL +sbit SDA = P3^0; // 分配P3.0给SDA +sbit SCL = P2^7; // 分配P2.7给SCL sbit GPIO3 = P2^5; sbit GPIO2 = P2^4; @@ -62,27 +62,27 @@ uchar I2C_Byte_Read(uchar device_address, uchar reg_add); #endif //------------------------------------------------------------------------------------ -//LCDŶ +//LCD控制引脚定义 //------------------------------------------------------------------------------------ #ifdef C8051F314 -sbit LCD_RS = P3^2; // RS=1ݣ RS=0ָ -sbit LCD_RW = P3^3; // RW=1 RW=0д -sbit LCD_Enalbe = P3^4; // LHֹ +sbit LCD_RS = P3^2; // RS=1:数据; RS=0:指令 +sbit LCD_RW = P3^3; // RW=1:读; RW=0:写 +sbit LCD_Enalbe = P3^4; // L:允许;H:禁止 sbit LCD_Reset = P1^7; // LCD_Reset ='1' means LCD reset -sbit LCD_BF = P2^0; // æźż +sbit LCD_BF = P2^0; // 忙信号检查 sfr LCDInterface = 0xA0; // P2 #endif #ifdef C8051F340 -sbit LCD_RS = P2^2; // RS=1ݣ RS=0ָ -sbit LCD_RW = P2^1; // RW=1 RW=0д -sbit LCD_Enalbe = P2^0; // LHֹ +sbit LCD_RS = P2^2; // RS=1:数据; RS=0:指令 +sbit LCD_RW = P2^1; // RW=1:读; RW=0:写 +sbit LCD_Enalbe = P2^0; // L:允许;H:禁止 sbit LCD_Reset = P0^7; // LCD_Reset ='1' means LCD reset -sbit LCD_BF = P1^0; // æźż +sbit LCD_BF = P1^0; // 忙信号检查 sfr LCDInterface = 0x90; // P1 #endif //------------------------------------------------------------------------------------ -//KEYŶ +//KEY引脚定义 //------------------------------------------------------------------------------------ #ifdef C8051F314 sfr KeyInterface = 0x90; // P1 @@ -93,26 +93,26 @@ sfr KeyInterface = 0x80; // P0 #endif //------------------------------------------------------------------------------------ -//LCDʾֺ +//LCD显示部分函数定义 //------------------------------------------------------------------------------------ -void LCD_Init(void); // LCDʾʼӳ// -void BUSY_Check(void); // æźӳ -void DISPLAY_Start(void); // ʾӭ -void Display1(void); // һʾӳ -void Display2(void); // һʾӳ -void Display3(void); // ʾӳ -void Display4(void); // ʾӳ -void CODE_Send(uchar data command); // ӳ -void DATA_Send(uchar data mydata); // ݷӳ -void DELAY_Write(void); // дʱ -void DELAY_Display(void); // ʾӭʱ -uchar BYTE_Reversal(uchar Reversal_data); // 1ֽڵ8Ϊת +void LCD_Init(void); // LCD显示初始化子程序// +void BUSY_Check(void); // 检测忙信号子程序 +void DISPLAY_Start(void); // 显示欢迎画面 +void Display1(void); // 第一行显示子程序 +void Display2(void); // 第一行显示子程序 +void Display3(void); // 第三行显示子程序 +void Display4(void); // 第四行显示子程序 +void CODE_Send(uchar data command); // 命令发送子程序 +void DATA_Send(uchar data mydata); // 数据发送子程序 +void DELAY_Write(void); // 写入延时 +void DELAY_Display(void); // 显示欢迎画面延时 +uchar BYTE_Reversal(uchar Reversal_data); // 1字节的8为反转程序 void LCD_Number_Cal (uint LCD_Number); void LCD_RSSI_Display (uchar RSSI_Number); uchar HexToASCII(uint num); uchar KEY_Scan (void); -void dlms(void); // ɨȥʱ -void delay(void); // ɨLCDʱ +void dlms(void); // 键盘扫描去抖动延时程序 +void delay(void); // 扫键,LCD延时 void Display_Channel (uint LCD_Number); void Delay_ms(uint time_number); diff --git a/democode/KT0642_demoboard/lcd_key.c b/democode/KT0642_demoboard/lcd_key.c index 1f3b1a0..7c395af 100644 --- a/democode/KT0642_demoboard/lcd_key.c +++ b/democode/KT0642_demoboard/lcd_key.c @@ -18,11 +18,11 @@ uchar code LCD_Welcome2[14]={0x46,0x4D,0x2D,0x52,0x65,0x63,0x65,0x69,0x76,0x65,0 uchar code LCD_Welcome2[14]={0x46,0x4D,0x2D,0x54,0x72,0x61,0x6e,0x73,0x6d,0x69,0x74,0x74,0x65,0x72}; // FM-Transmitter #endif uchar code LCD_Welcome3[16]={0x20,0x20,0x20,0x20,0x4B,0x54,0x20,0x4D,0x69,0x63,0x72,0x6F,0x20,0x20,0x20,0x20}; // KT Micro -uchar code LCD_Welcome4[10]={0x32,0x30,0x30,0x38,0x2E,0x20,0x37,0x2E,0x20,0x20}; // 20087 -uchar code LCD_Frequency_Title[6]={0x46,0x72,0x65,0x2E,0xA1,0xC3}; // Frequency +uchar code LCD_Welcome4[10]={0x32,0x30,0x30,0x38,0x2E,0x20,0x37,0x2E,0x20,0x20}; // 2008年7月 +uchar code LCD_Frequency_Title[6]={0x46,0x72,0x65,0x2E,0xA1,0xC3}; // Frequency: uchar code LCD_Number[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; // 0,1,2,3,4,5,6,7,8,9 uchar code LCD_RSSI_Title[6]={0x52,0x53,0x53,0x49,0xA1,0xC3}; // RSSI -uchar code LCD_Rfgain_Title[8]={0x50,0x41,0x20,0x47,0x61,0x69,0x6e,0x3a}; // PA Gain +uchar code LCD_Rfgain_Title[8]={0x50,0x41,0x20,0x47,0x61,0x69,0x6e,0x3a}; // PA Gain: uchar code LCD_PGA_Title[8]={0x41,0x75,0x20,0x47,0x61,0x69,0x6e,0x3a}; // AudioGain: uchar code LCD_PGA[22]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x31,0x30,0x31,0x31,0x31,0x32,0x31,0x33,0x31,0x34,0x31,0x35}; //0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 uchar code LCD_PETCS_Title[8]={0x50,0x72,0x65,0x2d,0x65,0x6d,0x70,0x3a}; // Pre-emp: @@ -55,7 +55,7 @@ uchar HexToASCII(uint num) //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ -//ֵ +//键值表 //Next : 0x48,01001000 Previous: 0x28,00101000 Autoscan: 0x18,00011000 //Up : 0x44,01000100 Down : 0x24,00100100 RDS : 0x14,00010100 //3D : 0x42,01000010 Bass : 0x22,00100010 S/M : 0x12,00010010 @@ -63,10 +63,10 @@ uchar HexToASCII(uint num) //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ -// ɨȥʱ +// 键盘扫描去抖动延时函数 //------------------------------------------------------------------------------------ #ifdef C8051F340 -void dlms(void) // ɨȥʱ +void dlms(void) // 键盘扫描去抖动延时函数 { unsigned int i,j; for (i=0x1000;i>0;i--) @@ -78,40 +78,40 @@ void dlms(void) // //------------------------------------------------------------------------------------ -// ɨ +// 键盘扫描程序 //------------------------------------------------------------------------------------ uchar KEY_Scan (void) { uchar sccode,recode; KeyInterface=0xF0; - delay(); // ɨźȫ0 - if((KeyInterface&0xF0)!=0xF0) // жǷм + delay(); // 行扫描信号全发0 + if((KeyInterface&0xF0)!=0xF0) // 判断是否有键按下 { delay(); - dlms(); // ʱȥ + dlms(); // 延时去抖动 delay(); - if ((KeyInterface&0xF0)!=0xF0) // м + if ((KeyInterface&0xF0)!=0xF0) // 还有键按下 { delay(); - sccode=0xFE; // ɨֵ + sccode=0xFE; // 逐行扫描初值 delay(); while((sccode&0x10)!=0) {delay(); - KeyInterface=sccode; // ɨ + KeyInterface=sccode; // 输出行扫描码 delay(); - if((KeyInterface & 0xF0) != 0xF0) // м + if((KeyInterface & 0xF0) != 0xF0) // 如果本行有键按下 { delay(); - recode=(KeyInterface & 0xF0) | 0x0F; // ɨ + recode=(KeyInterface & 0xF0) | 0x0F; // 输出列扫描码 delay(); - return ((~sccode)+(~recode)); // ֵؼֵ + return ((~sccode)+(~recode)); // 求出键值,并返回键值 delay(); } - else sccode=(sccode<<1)|0x01; // ޼£ɨһ + else sccode=(sccode<<1)|0x01; // 如果本行无键按下,则扫下一行 } } } - return(0); // ޼£ؼֵΪ0 + return(0); // 无键按下,返回键值为0 } #ifdef C8051F314 @@ -151,9 +151,9 @@ void Delay_ms(uint time_number) // delay //------------------------------------------------------------------------------------ -void delay(void ) //<<<޸11 +void delay(void ) //<<<修改11 { - uchar i; //<<<޸14 + uchar i; //<<<修改14 for(i=0;i<=1;i++) { _nop_(); @@ -161,64 +161,64 @@ void delay(void ) //<<< } //------------------------------------------------------------------------------------ -// LCDʾ +// LCD显示函数 //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ -// LCDʾʼӳ +// LCD显示初始化子程序 //------------------------------------------------------------------------------------ void LCD_Init(void) { LCD_Reset=0; - delay(); // LCDʼʱ - LCD_Reset=1; // ֹλ - LCD_RW=0; // дģʽ + delay(); // LCD初始化延时 + LCD_Reset=1; // 禁止复位 + LCD_RW=0; // 写入模式 LCD_Enalbe=0; - CODE_Send(0x30); // 书趨RE=0ָG=0ͼʾ - CODE_Send(0x01); // ʾ - CODE_Send(0x06); // 趨I/D=1ơS=0 DDRAMΪ״̬ʾƶ - CODE_Send(0x0c); // ʾ״̬D=ʾC=αءB=αλù - CODE_Send(0x01); // ʾ - DISPLAY_Start(); // ʾӭ - DELAY_Display(); // ʾӭʱ - CODE_Send(0x01); // ʾ -// Display1(); // һʾӳ -// Display2(); // ڶʾӳ -// Display3(); // ʾӳ -// Display4(); // ʾӳ + CODE_Send(0x30); // 扩充功能设定:RE=0基本指令集动作、G=0绘图显示关 + CODE_Send(0x01); // 清除显示 + CODE_Send(0x06); // 点设定:I/D=1光标右移、S=0 DDRAM为读状态,整体显示不移动 + CODE_Send(0x0c); // 显示状态D=整体显示开、C=游标关、B=游标位置关 + CODE_Send(0x01); // 清除显示 + DISPLAY_Start(); // 显示欢迎画面 + DELAY_Display(); // 显示欢迎画面延时 + CODE_Send(0x01); // 清除显示 +// Display1(); // 第一行显示子程序 +// Display2(); // 第二行显示子程序 +// Display3(); // 第三行显示子程序 +// Display4(); // 第四行显示子程序 } void Display_Start(void) { - uchar wide,offset; // ַ/ʾȣʾƫ + uchar wide,offset; // 定义字符/汉字显示长度,定义显示偏移量 CODE_Send(0x82); - for(wide=0;wide<4;wide++) // ӭһУʾӭʹ + for(wide=0;wide<4;wide++) // 欢迎画面第一行,显示:欢迎使用 { - offset=wide<<1; // LCDʾÿ2λ1 + offset=wide<<1; // LCD显示数组每2位1组 DATA_Send(LCD_Welcome1[offset]); DATA_Send(LCD_Welcome1[offset+1]); } CODE_Send(0x90); - for(wide=0;wide<7;wide++) // ӭڶУʾƵϵͳ + for(wide=0;wide<7;wide++) // 欢迎画面第二行,显示:调频发射机系统 { - offset=wide<<1; // LCDʾÿ2λ1 + offset=wide<<1; // LCD显示数组每2位1组 DATA_Send(LCD_Welcome2[offset]); DATA_Send(LCD_Welcome2[offset+1]); } CODE_Send(0x88); - for(wide=0;wide<8;wide++) // ӭУʾKT Micro׿ + for(wide=0;wide<8;wide++) // 欢迎画面第三行,显示:KT Micro亢鹤凯 { - offset=wide<<1; // LCDʾÿ2λ1 + offset=wide<<1; // LCD显示数组每2位1组 DATA_Send(LCD_Welcome3[offset]); DATA_Send(LCD_Welcome3[offset+1]); } CODE_Send(0x9a); - for(wide=0;wide<5;wide++) // ӭУʾ200711 + for(wide=0;wide<5;wide++) // 欢迎画面第四行,显示:2007年11月 { - offset=wide<<1; // LCDʾÿ2λ1 + offset=wide<<1; // LCD显示数组每2位1组 DATA_Send(LCD_Welcome4[offset]); DATA_Send(LCD_Welcome4[offset+1]); } @@ -226,16 +226,16 @@ void Display_Start(void) /* //------------------------------------------------------------------------------------ -//һʾӳ +//第一行显示子程序 //------------------------------------------------------------------------------------ void Display1(void) { - uchar wide,offset; // ַ/ʾȣʾƫ - CODE_Send(0x80); // Ƶʣ + uchar wide,offset; // 定义字符/汉字显示长度,定义显示偏移量 + CODE_Send(0x80); // 频率: for(wide=0;wide<3;wide++) { - offset=wide<<1; // LCDʾÿ2λ1 + offset=wide<<1; // LCD显示数组每2位1组 DATA_Send(LCD_Frequency_Title[offset]); DATA_Send(LCD_Frequency_Title[offset+1]); } @@ -250,21 +250,21 @@ void Display1(void) } //------------------------------------------------------------------------------------ -//ڶʾӳ +//第二行显示子程序 //------------------------------------------------------------------------------------ #ifdef DEMO_RX void Display2(void) { - uchar wide,offset; // ַ/ʾȣʾƫ - CODE_Send(0x90); // Ƶ棺 + uchar wide,offset; // 定义字符/汉字显示长度,定义显示偏移量 + CODE_Send(0x90); // 音频增益: for(wide=0;wide<5;wide++) { - offset=wide<<1; // LCDʾÿ2λ1 + offset=wide<<1; // LCD显示数组每2位1组 DATA_Send(LCD_PGA_Title[offset]); DATA_Send(LCD_PGA_Title[offset+1]); } -// offset=IAL*3; // LCDʾÿ3λ1 - CODE_Send(0x94); // ʾxxx-12-12dB +// offset=IAL*3; // LCD显示数组每3位1组 + CODE_Send(0x94); // 显示:xxx(-12-12)dB if(IAL<10) { DATA_Send(0x20); @@ -284,14 +284,14 @@ void Display2(void) #ifdef DEMO_TX void Display2(void) { - uchar offset; // ַ/ʾȣʾƫ - CODE_Send(0x90); // 书ʣ + uchar offset; // 定义字符/汉字显示长度,定义显示偏移量 + CODE_Send(0x90); // 发射功率: for(offset=0;offset<8;offset++) { DATA_Send(LCD_Rfgain_Title[offset]); } - CODE_Send(0x94); // ʾx1-15level + CODE_Send(0x94); // 显示:x(1-15)level DATA_Send( (TRL/10)+ 0x30); DATA_Send( (TRL%10)+ 0x30); // DATA_Send(0x4C); @@ -302,16 +302,16 @@ void Display2(void) } #endif //------------------------------------------------------------------------------------ -//ʾӳ RSSI +//第三行显示子程序 RSSI //------------------------------------------------------------------------------------ #ifdef DEMO_RX void Display3(void) { - uchar wide,offset; // ַ/ʾȣʾƫ - CODE_Send(0x88); // 书ʣ + uchar wide,offset; // 定义字符/汉字显示长度,定义显示偏移量 + CODE_Send(0x88); // 发射功率: for(wide=0;wide<3;wide++) { - offset=wide<<1; // LCDʾÿ2λ1 + offset=wide<<1; // LCD显示数组每2位1组 DATA_Send(LCD_RSSI_Title[offset]); DATA_Send(LCD_RSSI_Title[offset+1]); } @@ -320,14 +320,14 @@ void Display3(void) #ifdef DEMO_TX void Display3(void) { - uchar offset; // ַ/ʾȣʾƫ - CODE_Send(0x88); // Ƶ棺 + uchar offset; // 定义字符/汉字显示长度,定义显示偏移量 + CODE_Send(0x88); // 音频增益: for(offset=0;offset<8;offset++) { DATA_Send(LCD_PGA_Title[offset]); } - CODE_Send(0x8C); // ʾ-/+xx + CODE_Send(0x8C); // 显示-/+xx if(IAL<15) { DATA_Send('-'); @@ -352,11 +352,11 @@ void Display3(void) } #endif //------------------------------------------------------------------------------------ -//ʾӳ +//第四行显示子程序 //------------------------------------------------------------------------------------ #ifdef DEMO_RX -void Display4(void) // ʾԤغ; +void Display4(void) // 显示:预加重和静音 { #ifdef TST uint reg12; @@ -364,7 +364,7 @@ void Display4(void) // reg12 = reg12 & 0x0200; if (reg12 == 0x0200) { - CODE_Send(0x98); // LCDʾ"S" + CODE_Send(0x98); // LCD显示"S"符号 DATA_Send(0x53); DATA_Send(0x74); DATA_Send(0x65); @@ -374,7 +374,7 @@ void Display4(void) // } else { - CODE_Send(0x98); // LCDʾ"M" + CODE_Send(0x98); // LCD显示"M"符号 DATA_Send(0x4D); DATA_Send(0x6f); DATA_Send(0x6e); @@ -384,7 +384,7 @@ void Display4(void) // } #else - CODE_Send(0x98); // LCDʾ"S" + CODE_Send(0x98); // LCD显示"S"符号 DATA_Send(0x53); DATA_Send(0x74); DATA_Send(0x65); @@ -392,7 +392,7 @@ void Display4(void) // DATA_Send(0x65); DATA_Send(0x6f); - CODE_Send(0x9C); // ʾB0-B3 + CODE_Send(0x9C); // 显示B0-B3 DATA_Send(0x42); DATA_Send(0x41); DATA_Send(0x53); @@ -401,25 +401,25 @@ void Display4(void) // #endif CODE_Send(0x9F); - DATA_Send(0x0E); //ʾַ + DATA_Send(0x0E); //显示音乐符号 } #endif #ifdef DEMO_TX -void Display4(void) // ʾԤغ; +void Display4(void) // 显示:预加重和静音 { -// uchar offset; // ַ/ʾȣʾƫ - CODE_Send(0x98); // Ԥأ +// uchar offset; // 定义字符/汉字显示长度,定义显示偏移量 + CODE_Send(0x98); // 预加重: // for(offset=0;offset<8;offset++) // { // DATA_Send(LCD_PETCS_Title[offset]); // } - if( (I2C_Byte_Read(KT0806r_address, 0x02) & 0x01) == 0) // Ԥر־λ־λΪ͵ƽ˵ԤΪ75us + if( (I2C_Byte_Read(KT0806r_address, 0x02) & 0x01) == 0) // 检查预加重标志位,如果标志位为低电平说明预加重为75us { DATA_Send('7'); DATA_Send('5'); } - else // Ԥر־λ־λΪߵƽ˵ԤΪ50us + else // 检查预加重标志位,如果标志位为高电平说明预加重为50us { DATA_Send('5'); DATA_Send('0'); @@ -427,7 +427,7 @@ void Display4(void) // DATA_Send('u'); DATA_Send('s'); - CODE_Send(0x9B); // LCDʾBASS + CODE_Send(0x9B); // LCD显示“BASS” DATA_Send('B'); DATA_Send('A'); DATA_Send('S'); @@ -435,13 +435,13 @@ void Display4(void) // DATA_Send(BASS_LEVEL+ 0x30); CODE_Send(0x9F); - if( (I2C_Byte_Read(KT0806r_address, 0x04) & 0x40) == 0) // Mono־λǵǰʾST + if( (I2C_Byte_Read(KT0806r_address, 0x04) & 0x40) == 0) // 检查Mono标志位,如果是当前是立体声则显示“ST” { DATA_Send('S'); DATA_Send('T'); } - else // Mono־λǵǰǵʾ M + else // 检查Mono标志位,如果是当前是单声道则显示“ M” { DATA_Send(' '); DATA_Send('M'); @@ -450,9 +450,9 @@ void Display4(void) // #endif */ //------------------------------------------------------------------------------------ -// ʾʱ +// 显示延时 //------------------------------------------------------------------------------------ -void DELAY_Display(void) // ʾӭʱ +void DELAY_Display(void) // 显示欢迎画面延时 { unsigned int i,j; for (i=0x2000;i>0;i--) @@ -464,7 +464,7 @@ void DELAY_Display(void) // //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ -void DELAY_Write(void) // ʾӭʱ +void DELAY_Write(void) // 显示欢迎画面延时 { uchar i; for(i=0;i<100;i++) @@ -472,63 +472,63 @@ void DELAY_Write(void) // } //------------------------------------------------------------------------------------ -// ݷӳ +// 数据发送子程序 //------------------------------------------------------------------------------------ void DATA_Send(uchar data mydata) { - BUSY_Check(); // Ƿæ״̬ + BUSY_Check(); // 检查是否处于忙状态 DELAY_Write(); - LCDInterface=BYTE_Reversal(mydata); // дmydata + LCDInterface=BYTE_Reversal(mydata); // 写入mydata代表的数据 DELAY_Write(); - LCD_RS=1; // ģʽ + LCD_RS=1; // 数据模式 DELAY_Write(); - LCD_RW=0; // дģʽ + LCD_RW=0; // 写入模式 DELAY_Write(); - LCD_Enalbe=1; // д + LCD_Enalbe=1; // 允许写入 DELAY_Write(); - LCD_Enalbe=0; // ֹд + LCD_Enalbe=0; // 禁止写入 DELAY_Write(); - LCDInterface=0xff; // P2ȫ1 + LCDInterface=0xff; // P2口置全1 } //------------------------------------------------------------------------------------ -// ӳ +// 命令发送子程序 //------------------------------------------------------------------------------------ void CODE_Send(uchar data command) { - BUSY_Check(); // Ƿæ״̬ + BUSY_Check(); // 检查是否处于忙状态 DELAY_Write(); - LCDInterface=BYTE_Reversal(command); // дcommandָ + LCDInterface=BYTE_Reversal(command); // 写入command代表的指令码 DELAY_Write(); - LCD_RS=0; // ָģʽ + LCD_RS=0; // 指令模式 DELAY_Write(); - LCD_RW=0; // дģʽ + LCD_RW=0; // 写入模式 DELAY_Write(); - LCD_Enalbe=1; // д + LCD_Enalbe=1; // 允许写入 DELAY_Write(); - LCD_Enalbe=0; // ֹд + LCD_Enalbe=0; // 禁止写入 DELAY_Write(); - LCDInterface=0xff; // P2ȫ1 + LCDInterface=0xff; // P2口置全1 } //------------------------------------------------------------------------------------ -// æźӳ +// 检测忙信号子程序 //------------------------------------------------------------------------------------ -void BUSY_Check(void) // æźżӳ +void BUSY_Check(void) // 忙信号检查子程序 { DELAY_Write(); - LCD_RS=0; // ָģʽ + LCD_RS=0; // 指令模式 DELAY_Write(); - LCD_RW=1; // ģʽ + LCD_RW=1; // 读出模式 DELAY_Write(); - LCD_Enalbe=1; // + LCD_Enalbe=1; // 允许读出 DELAY_Write(); - while(LCD_BF){;} // ȴֱæΪֹ + while(LCD_BF){;} // 等待,直到不忙为止 DELAY_Write(); - LCD_Enalbe=0; // ֹ + LCD_Enalbe=0; // 禁止输入 DELAY_Write(); } //------------------------------------------------------------------------------------ -// 1Byte ת +// 1Byte 反转程序 //------------------------------------------------------------------------------------ uchar BYTE_Reversal(uchar Reversal_data) { @@ -605,7 +605,7 @@ void LCD_RSSI_Display (uchar RSSI_Number) RSSI_Ten = RSSI_Hundred_Remainder / 10; RSSI_mid = 0x30 + RSSI_Ten; RSSI_low = 0x30 + RSSI_Ten_Remainder; - CODE_Send(0x8B); // ʾ-XXX + CODE_Send(0x8B); // 显示:-XXX DATA_Send(0x2D);//"-" DATA_Send(RSSI_high);// DATA_Send(RSSI_mid); @@ -631,7 +631,7 @@ void Display_Channel (uint LCD_Number) HundredKHz_Remainder = MHz_Remainder % 10; HundredKHz = MHz_Remainder / 10; - CODE_Send(0x83); // ʾxxx.x + CODE_Send(0x83); // 显示xxx.x if(HundredMHz == 0) DATA_Send(0x20); else diff --git a/democode/KT0642_demoboard/main.c b/democode/KT0642_demoboard/main.c index 55fd904..bf0d4dd 100644 --- a/democode/KT0642_demoboard/main.c +++ b/democode/KT0642_demoboard/main.c @@ -43,18 +43,18 @@ int index = 0; int regg = 0; //------------------------------------------------------------------------------------ -// main -// -//˵ -//úSYSCLK_Init(); PORT_Init(); LCD_Init(); IIC_Slave_Task(); +//函 数 名:main +//功能描述:主程序 +//函数说明: +//调用函数:SYSCLK_Init(); PORT_Init(); LCD_Init(); IIC_Slave_Task(); // KEY_Scan(); KT06xx_Previous_Page(); KT06xx_Next_Page(); // KT06xx_show2(); Write_EEPROM(); -//ȫֱ -// 룺 -// أ -// ߣKANG Hekai ʱ䣺2012-02-01 -// ߣ ʱ䣺 -// V1.0 2012-02-01 Initial version +//全局变量:无 +//输 入: +//返 回:无 +//设 计 者:KANG Hekai 时间:2012-02-01 +//修 改 者: 时间: +//版 本:V1.0 2012-02-01 Initial version //------------------------------------------------------------------------------------ void main (void) { @@ -87,10 +87,10 @@ void main (void) { if((KeyInterface&0xF0)!=0xF0) { - key=KEY_Scan(); // ȡֵ + key=KEY_Scan(); // 取键值 if (key!=0) { - switch (key) // жϼ + switch (key) // 判断键 { //Pre_Page : 0x48,01001000 Next_Page : 0x28,00101000 Clear : 0x18,00011000 //Mode_SW : 0x44,01000100 N.A. : 0x24,00100100 Write_Start : 0x14,00010100 @@ -154,7 +154,7 @@ void KT06xx_Previous_Page (void) while(1) { unsigned char key; - key=KEY_Scan(); // ȡֵ + key=KEY_Scan(); // 取键值 if (key==0) break; @@ -294,7 +294,7 @@ void KT06xx_Next_Page (void) while(1) { unsigned char key; - key=KEY_Scan(); // ȡֵ + key=KEY_Scan(); // 取键值 if (key==0) break; @@ -341,7 +341,7 @@ void KT06xx_show2 (void) while(1) { unsigned char key; - key=KEY_Scan(); // ȡֵ + key=KEY_Scan(); // 取键值 if (key==0) break; @@ -370,17 +370,17 @@ void KT06xx_show2 (void) //------------------------------------------------------------------------------------ -// Write_EEPROM -//EEPROMд -//˵ -//úKT_Bus_Write(); Delay_ms(); Verify_EEPROM(); +//函 数 名:Write_EEPROM +//功能描述:EEPROM烧写程序 +//函数说明: +//调用函数:KT_Bus_Write(); Delay_ms(); Verify_EEPROM(); // CODE_Send(); DATA_Send(); KT06xx_Next_Page(); -//ȫֱEEPROM_error -// 룺 -// أ -// ߣKANG Hekai ʱ䣺2012-02-01 -// ߣKANG Hekai ʱ䣺2016-09-26 -// V1.0 2012-02-01 Initial version +//全局变量:EEPROM_error +//输 入: +//返 回:无 +//设 计 者:KANG Hekai 时间:2012-02-01 +//修 改 者:KANG Hekai 时间:2016-09-26 +//版 本:V1.0 2012-02-01 Initial version // V1.1 2013-04-08 Modified the function of "Write_EEPROM". // V1.2 2014-06-13 Supported KT062x. // V1.3 2016-09-26 Supported KT064x. @@ -449,7 +449,7 @@ void Write_EEPROM(void) break; } - CODE_Send(0x01); // ʾ + CODE_Send(0x01); // 清除显示 CODE_Send(0x98); DATA_Send( ' ' ); @@ -530,7 +530,7 @@ void Verify_EEPROM(uint EEPROM_Data) EEPROM_error = 1; return; } - CODE_Send(0x01); // ʾ + CODE_Send(0x01); // 清除显示 CODE_Send(0x80); DATA_Send( 'R' ); DATA_Send( 'e' ); diff --git a/democode/KT0646M_demoboard/c/I2C.c b/democode/KT0646M_demoboard/c/I2C.c index 6778f59..0ee0a62 100644 --- a/democode/KT0646M_demoboard/c/I2C.c +++ b/democode/KT0646M_demoboard/c/I2C.c @@ -5,10 +5,10 @@ // Revision History // Version Date Description // V1.0 2012-08-01 Initial draft -// V1.1 2013-11-22 ıͶ巽 -// V1.2 2017-02-08 ʽ淶 -// V0.3 2017-04-27 ӼƵʵʱȰѵƵˣtunęٻָԭƵãmain.c -// ̨һֱͬIJtunęһʱ󲽽410main.c +// V1.1 2013-11-22 改变变量类型定义方法 +// V1.2 2017-02-08 格式规范化整理 +// V0.3 2017-04-27 加减频率的时候,先把导频关了,tune完台后再恢复原来导频的设置(main.c) +// 调台中一直以相同的步进进行tune台,不会调一段时间后步进变成4倍和10倍(main.c) //***************************************************************************** //----------------------------------------------------------------------------- @@ -24,18 +24,18 @@ //----------------------------------------------------------------------------- BOOL Ack_Flag=0; // I2C Ack Flag -#ifdef I2C_BYTE_MODE //I2CByteģ +#ifdef I2C_BYTE_MODE //I2C按Byte操作模 //----------------------------------------------------------------------------- -// I2C_Byte_Write -//I2CByteд -//˵ -//ȫֱ -// 룺uchar device_address,uchar reg_add,uchar writedata -// أ -// ߣPAE ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:I2C_Byte_Write +//功能描述:I2C按Byte写操作 +//函数说明: +//全局变量:无 +//输 入:uchar device_address,uchar reg_add,uchar writedata +//返 回:无 +//设 计 者:PAE 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void I2C_Byte_Write(UINT8 device_address, UINT8 reg_add, UINT8 writedata) { @@ -60,15 +60,15 @@ void I2C_Byte_Write(UINT8 device_address, UINT8 reg_add, UINT8 writedata) } //----------------------------------------------------------------------------- -// I2C_Byte_Read -//I2CByte -//˵ -//ȫֱ -// 룺uchar device_address,uchar reg_add -// أȷuchar readdata 0x00 -// ߣPAE ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:I2C_Byte_Read +//功能描述:I2C按Byte读操作 +//函数说明: +//全局变量:无 +//输 入:uchar device_address,uchar reg_add +//返 回:正确:uchar readdata 错误:0x00 +//设 计 者:PAE 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- UINT8 I2C_Byte_Read(UINT8 device_address, UINT8 reg_add) { @@ -114,18 +114,18 @@ UINT8 I2C_Byte_Read(UINT8 device_address, UINT8 reg_add) #endif -#ifdef I2C_WORD_MODE //I2CWORDģʽ +#ifdef I2C_WORD_MODE //I2C按WORD操作模式 //----------------------------------------------------------------------------- -// I2C_Word_Write -//I2CWORDд -//˵ -//ȫֱ -// 룺uchar device_address, uchar reg_add, uint writeword -// أ -// ߣPAE ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:I2C_Word_Write +//功能描述:I2C按WORD写操作 +//函数说明: +//全局变量:无 +//输 入:uchar device_address, uchar reg_add, uint writeword +//返 回:无 +//设 计 者:PAE 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void I2C_Word_Write(UINT8 device_address, UINT8 reg_add, UINT16 writeword) { @@ -162,15 +162,15 @@ void I2C_Word_Write(UINT8 device_address, UINT8 reg_add, UINT16 writeword) } //----------------------------------------------------------------------------- -// I2C_Word_Read -//I2CWord -//˵ -//ȫֱ -// 룺uchar device_address,uchar reg_add -// أȷUINT16 readdata 0x0000 -// ߣPAE ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:I2C_Word_Read +//功能描述:I2C按Word读操作 +//函数说明: +//全局变量:无 +//输 入:uchar device_address,uchar reg_add +//返 回:正确:UINT16 readdata 错误:0x0000 +//设 计 者:PAE 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- UINT16 I2C_Word_Read(UINT8 device_address, UINT8 reg_add) { @@ -191,7 +191,7 @@ UINT16 I2C_Word_Read(UINT8 device_address, UINT8 reg_add) I2C_Ack(); if (Ack_Flag == 0) { - // SDA = 1;//SDA Ϊ룬 + // SDA = 1;//SDA 设为输入,读引脚 readdata_high = I2C_Receivedata(); SDA = 0; I2C_Delay();I2C_Delay(); @@ -238,15 +238,15 @@ UINT16 I2C_Word_Read(UINT8 device_address, UINT8 reg_add) #endif //----------------------------------------------------------------------------- -// I2C_Delay -//I2Cʱ -//˵ -//ȫֱ -// 룺 -// أ -// ߣPAE ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:I2C_Delay +//功能描述:I2C延时 +//函数说明: +//全局变量:无 +//输 入:无 +//返 回:无 +//设 计 者:PAE 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void I2C_Delay(void) { @@ -259,15 +259,15 @@ void I2C_Delay(void) } //----------------------------------------------------------------------------- -// I2C_Start -//I2C֡ʼ -//˵ -//ȫֱ -// 룺 -// أ -// ߣPAE ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:I2C_Start +//功能描述:I2C数据帧开始 +//函数说明: +//全局变量:无 +//输 入:无 +//返 回:无 +//设 计 者:PAE 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void I2C_Start(void) { @@ -283,15 +283,15 @@ void I2C_Start(void) } //----------------------------------------------------------------------------- -// I2C_Senddata -//I2C -//˵ -//ȫֱ -// 룺uchar senddata -// أ -// ߣPAE ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:I2C_Senddata +//功能描述:I2C发送数据 +//函数说明: +//全局变量:无 +//输 入:uchar senddata +//返 回:无 +//设 计 者:PAE 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void I2C_Senddata(UINT8 senddata) { @@ -314,15 +314,15 @@ void I2C_Senddata(UINT8 senddata) } //----------------------------------------------------------------------------- -// I2C_Receivedata -//I2C -//˵ -//ȫֱ -// 룺 -// أuchar receivedata -// ߣPAE ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:I2C_Receivedata +//功能描述:I2C接收数据 +//函数说明: +//全局变量:无 +//输 入:无 +//返 回:uchar receivedata +//设 计 者:PAE 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- UINT8 I2C_Receivedata(void) { @@ -343,15 +343,15 @@ UINT8 I2C_Receivedata(void) } //----------------------------------------------------------------------------- -// I2C_Ack -//I2C_Ack -//˵ -//ȫֱAck_Flag -// 룺 -// أ -// ߣPAE ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:I2C_Ack +//功能描述:I2C_Ack +//函数说明: +//全局变量:Ack_Flag +//输 入:无 +//返 回:无 +//设 计 者:PAE 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void I2C_Ack(void) { @@ -365,15 +365,15 @@ void I2C_Ack(void) } //----------------------------------------------------------------------------- -// I2C_Stop -//I2C֡ -//˵ -//ȫֱ -// 룺 -// أ -// ߣPAE ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:I2C_Stop +//功能描述:I2C数据帧结束 +//函数说明: +//全局变量:无 +//输 入:无 +//返 回:无 +//设 计 者:PAE 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void I2C_Stop(void) { diff --git a/democode/KT0646M_demoboard/c/KT_WirelessMicTxdrv.c b/democode/KT0646M_demoboard/c/KT_WirelessMicTxdrv.c index 7e204f1..3ee42ce 100644 --- a/democode/KT0646M_demoboard/c/KT_WirelessMicTxdrv.c +++ b/democode/KT0646M_demoboard/c/KT_WirelessMicTxdrv.c @@ -6,23 +6,25 @@ // Revision History // Version Date Description // V0.1 2016-04-26 For KT0646M_VX -// V0.2 2016-06-01 VXVX2ıѡ +// V0.2 2016-06-01 增加VX和VX2的编译选项 // V0.3 2016-08-18 For KT0646M_VX4 -// V0.3.1 2016-08-24 ɾKT_WirelessMicTx_InitһЩظ -// V0.4 2016-08-26 XTAL_DUAL -// V0.5 2016-10-11 ޸˳ʼеһЩã0x25,0x26Ĵüӵ˳ʼ棬 -// ڳʼset pilot frequency -// V0.5.1 2016-10-17 ޸һĺ궨壬RXISKT0616MBPSKľģʽȻٸ -// Ƿ˫KT0616Mѡijӽȥ -// V0.5.2 2016-11-15 tunęǰlo_fine_vref_selΪ3tuneij0. -// V0.5.3 2016-12-15 ڳʼаlo_fine_vref_selΪ3tunęʱ޸.Ϊ¶ -// 仯⣬DOUBLE_KVCOΧĴ -// V0.6 2017-02-08 ʽ淶 -// V1.1 2017-04-27 ɾһЩʼûõĶЩСдĸĺ궨ij˴дĸ -// V1.2 2017-05-24 ʼУHARD_LIMIT14ij15COMPANDOR_TCij348ms -// V1.3 2017-09-18 COMPEN_GAIN3ij1,MIC_SENS_GAIN9ij5,COMPANDOR_TC_48msijCOMPANDOR_TC_12ms -// V1.4 2017-10-10 echoرյʱ򣬲echoǰEcho_Ratioд0,soft_rstڼĴ0x3ebit15ˣ0x1ebit4. -// V1.5 2017-12-14 ݽKT0616MʱBPSK_NEW_MODEij0Ϊ1 +// V0.3.1 2016-08-24 删除KT_WirelessMicTx_Init程序内一些重复配置 +// V0.4 2016-08-26 修正了XTAL_DUAL问题 +// V0.5 2016-10-11 修改了初始化函数中的一些配置,把0x25,0x26寄存器的配置加到了初始化函数里面, +// 在初始化函数里面set pilot frequency +// V0.5.1 2016-10-17 重新修改了一下里面的宏定义,定义了RXISKT0616M就用BPSK的旧模式,然后再根据 +// 是否是双晶振把KT0616M选晶振的程序加进去。 +// V0.5.2 2016-11-15 在tune台前把lo_fine_vref_sel改为3,tune完后改成0. +// V0.5.3 2016-12-15 在初始化中把lo_fine_vref_sel改为3,不用在tune台的时候再来回修改了.为了温度 +// 变化不锁定的问题,详见被宏DOUBLE_KVCO包围的代码 +// V0.6 2017-02-08 格式规范化整理 +// V1.1 2017-04-27 删除了一些初始化函数里面没用的东西,把有些用小写字母定义的宏定义改成了大写的字母 +// V1.2 2017-05-24 初始化中,把HARD_LIMIT从14改成了15,COMPANDOR_TC改成了3,即48ms。 +// V1.3 2017-09-18 COMPEN_GAIN由3改成1,MIC_SENS_GAIN由9改成5,COMPANDOR_TC_48ms改成COMPANDOR_TC_12ms +// V1.4 2017-10-10 echo关闭的时候,不真正关echo而是把Echo_Ratio写成0,soft_rst不是在寄存器0x3e的bit15了,而是在0x1e的bit4. +// V1.5 2017-12-14 根据接收是KT0616M时,把BPSK_NEW_MODE改成0,否则为1 +// V1.6 2018-12-11 在tune完台通过操作bpsk_dat_en(先写0再写1),可以使RX正常接收到数据,redmine 11433 +// 压扩功能开启或关闭封成了一个函数,KT_WirelessMicTx_COMPANDOR_Dis(BOOL COMP_Dis),传入的参数为1则关闭,否则开启 //***************************************************************************** //----------------------------------------------------------------------------- @@ -32,15 +34,15 @@ #include //----------------------------------------------------------------------------- -// KT_Bus_Write -//д -//˵ -//ȫֱ -// 룺UINT8 Register_Address, UINT16 Word_Data -// أ -// ߣKang Hekai ʱ䣺2014-02-13 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_Bus_Write +//功能描述:总线写程序 +//函数说明: +//全局变量:无 +//输 入:UINT8 Register_Address, UINT16 Word_Data +//返 回:无 +//设 计 者:Kang Hekai 时间:2014-02-13 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void KT_Bus_Write(UINT8 Register_Address, UINT16 Word_Data) { @@ -48,15 +50,15 @@ void KT_Bus_Write(UINT8 Register_Address, UINT16 Word_Data) } //----------------------------------------------------------------------------- -// KT_Bus_Read -//߶ -//˵ -//ȫֱ -// 룺UINT8 Register_Address -// أI2C_Word_Read(KTWirelessMicTxr_address, Register_Address) -// ߣKang Hekai ʱ䣺2014-02-13 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_Bus_Read +//功能描述:总线读程序 +//函数说明: +//全局变量:无 +//输 入:UINT8 Register_Address +//返 回:I2C_Word_Read(KTWirelessMicTxr_address, Register_Address) +//设 计 者:Kang Hekai 时间:2014-02-13 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- UINT16 KT_Bus_Read(UINT8 Register_Address) { @@ -64,15 +66,15 @@ UINT16 KT_Bus_Read(UINT8 Register_Address) } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_PreInit -//оƬʼ -//˵жǷоƬǷϵ磬I2CǷд -//ȫֱINIT_FAIL_TH -// 룺 -// أȷ1 0 -// ߣKang Hekai ʱ䣺2014-02-13 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_WirelessMicTx_PreInit +//功能描述:芯片工作始化程序 +//函数说明:判断是否芯片是否正常上电,I2C总线是否读写正常 +//全局变量:INIT_FAIL_TH +//输 入:无 +//返 回:正确:1 错误:0 +//设 计 者:Kang Hekai 时间:2014-02-13 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- BOOL KT_WirelessMicTx_PreInit(void) { @@ -90,16 +92,17 @@ BOOL KT_WirelessMicTx_PreInit(void) } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_Init -//оƬʼ -//˵ -//ȫֱ -// 룺 -// أȷ1 0 -// ߣZhou Dongfeng ʱ䣺2016-04-26 -// ߣZhou Dongfeng ʱ䣺2016-08-26 -// V0.4 -// V1.2 HARD_LIMIT14ij15COMPANDOR_TCij348ms +//函 数 名:KT_WirelessMicTx_Init +//功能描述:芯片初始化程序 +//函数说明: +//全局变量:无 +//输 入:无 +//返 回:正确:1 错误:0 +//设 计 者:Zhou Dongfeng 时间:2016-04-26 +//修 改 者:Zhou Dongfeng 时间:2016-08-26 +//版 本:V0.4 +//版 本:V1.2 HARD_LIMIT从14改成了15,COMPANDOR_TC改成了3,即48ms +// V1.6 压扩功能开启或关闭封成了一个函数 //----------------------------------------------------------------------------- BOOL KT_WirelessMicTx_Init(void) { @@ -122,8 +125,8 @@ BOOL KT_WirelessMicTx_Init(void) KT_Bus_Write(0x0a, regx | 0x0200); regx = KT_Bus_Read(0x1C); - KT_Bus_Write(0x1C, (regx & 0xF1E1) | ( FDEV_MONITOR_TC_250ms << 10 ) | (COMPANDOR_ENABLE<<4) | - ( PRE_EMPHASIS_ENABLE << 9 ) | ( COMPANDOR_TC_12ms << 1 )); + KT_Bus_Write(0x1C, (regx & 0xF1E1)|( FDEV_MONITOR_TC_250ms << 10)|( PRE_EMPHASIS_ENABLE << 9 )|( COMPANDOR_TC_12ms << 1 )); + KT_WirelessMicTx_COMPANDOR_Dis(0);//1 disable COMPANDOR; 0 enable COMPANDOR KT_WirelessMicTx_Mic_Sens(MIC_SENS_GAIN_5); @@ -195,15 +198,15 @@ BOOL KT_WirelessMicTx_Init(void) } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_Standby -// -//˵ -//ȫֱ -// 룺 -// أȷ1 0 -// ߣKang Hekai ʱ䣺2014-02-13 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_WirelessMicTx_Standby +//功能描述:待机程序 +//函数说明: +//全局变量: +//输 入:无 +//返 回:正确:1 错误:0 +//设 计 者:Kang Hekai 时间:2014-02-13 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- BOOL KT_WirelessMicTx_Standby(void) { @@ -212,15 +215,15 @@ BOOL KT_WirelessMicTx_Standby(void) } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_WakeUp -//ѳ -//˵ģʽ -//ȫֱ -// 룺 -// أȷ1 0 -// ߣKang Hekai ʱ䣺2014-02-13 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_WirelessMicTx_WakeUp +//功能描述:唤醒程序 +//函数说明:脱离待机模式 +//全局变量: +//输 入:无 +//返 回:正确:1 错误:0 +//设 计 者:Kang Hekai 时间:2014-02-13 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- BOOL KT_WirelessMicTx_WakeUp(void) { @@ -229,20 +232,20 @@ BOOL KT_WirelessMicTx_WakeUp(void) KT_Bus_Write(0x03, (reg3 & 0x7FFF) | (WAKEUP << 15)); //Write Standby bit to 0 Delay_ms(50); KT_WirelessMicTx_Init(); -// wakeUpԺҪһЩtunęЧPAȹɲοmain.cKT_MicTX_Init +// wakeUp以后需要做一些tune台及设置音效和设置PA等工作,可参考main.c里面的KT_MicTX_Init函数 return(1); } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_PASW -//PA򿪡رճ -//˵оƬ򿪻߹رPA -//ȫֱ -// 룺bPA_Switch -// أȷ1 0 -// ߣZhou Dongfeng ʱ䣺2016-04-05 -// ߣZhou Dongfeng ʱ䣺2016-08-26 -// V0.4 +//函 数 名:KT_WirelessMicTx_PASW +//功能描述:PA打开、关闭程序 +//函数说明:用来控制芯片打开或者关闭PA +//全局变量: +//输 入:bPA_Switch +//返 回:正确:1 错误:0 +//设 计 者:Zhou Dongfeng 时间:2016-04-05 +//修 改 者:Zhou Dongfeng 时间:2016-08-26 +//版 本:V0.4 //----------------------------------------------------------------------------- BOOL KT_WirelessMicTx_PASW(BOOL bPA_Switch) { @@ -254,15 +257,15 @@ BOOL KT_WirelessMicTx_PASW(BOOL bPA_Switch) } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_PAGain -//PA -//˵cPaGainΧΪ0-6364 -//ȫֱ -// 룺cPaGain -// أȷ1 0 -// ߣZhou Dongfeng ʱ䣺2016-04-05 -// ߣ ʱ䣺 -// V0.1 +//函 数 名:KT_WirelessMicTx_PAGain +//功能描述:PA增益调整 +//函数说明:cPaGain范围为0-63,共64档 +//全局变量: +//输 入:cPaGain +//返 回:正确:1 错误:0 +//设 计 者:Zhou Dongfeng 时间:2016-04-05 +//修 改 者: 时间: +//版 本:V0.1 //----------------------------------------------------------------------------- BOOL KT_WirelessMicTx_PAGain(UINT8 cPaGain) { @@ -275,15 +278,15 @@ BOOL KT_WirelessMicTx_PAGain(UINT8 cPaGain) } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_Fdev_Monitor -//ʵʱƵƫȡ -//˵ȡǰ״̬ƵƫС -//ȫֱ -// 룺 -// أ(reg1C & 0xF000) >> 12 Ϊ0-15 -// ߣKang Hekai ʱ䣺2014-02-13 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_WirelessMicTx_Fdev_Monitor +//功能描述:实时频偏读取程序 +//函数说明:读取当前状态的频偏大小 +//全局变量: +//输 入:无 +//返 回:(reg1C & 0xF000) >> 12 (为0-15的整数) +//设 计 者:Kang Hekai 时间:2014-02-13 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- UINT8 KT_WirelessMicTx_Fdev_Monitor(void) { @@ -295,15 +298,15 @@ UINT8 KT_WirelessMicTx_Fdev_Monitor(void) } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_Mic_Sens -//Micȵ -//˵cMicSensΪ0-1516 -//ȫֱ -// 룺cMicSens -// أȷ1 0 -// ߣKang Hekai ʱ䣺2014-02-13 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_WirelessMicTx_Mic_Sens +//功能描述:Mic灵敏度调整 +//函数说明:cMicSens为0-15,共16档 +//全局变量: +//输 入:cMicSens +//返 回:正确:1 错误:0 +//设 计 者:Kang Hekai 时间:2014-02-13 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- BOOL KT_WirelessMicTx_Mic_Sens(UINT8 cMicSens) { @@ -316,15 +319,15 @@ BOOL KT_WirelessMicTx_Mic_Sens(UINT8 cMicSens) } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_Comp_Dis -//ѹܴ򿪡رճ -//˵оƬ򿪻߹رѹ -//ȫֱ -// 룺bComp_Dis -// أȷ1 0 -// ߣKang Hekai ʱ䣺2014-02-13 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_WirelessMicTx_Comp_Dis +//功能描述:压扩功能打开、关闭程序 +//函数说明:用来控制芯片打开或者关闭压扩功能 +//全局变量: +//输 入:bComp_Dis +//返 回:正确:1 错误:0 +//设 计 者:Kang Hekai 时间:2014-02-13 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- //BOOL KT_WirelessMicTx_Comp_Dis(BOOL bComp_Dis) //{ @@ -337,15 +340,15 @@ BOOL KT_WirelessMicTx_Mic_Sens(UINT8 cMicSens) //} //----------------------------------------------------------------------------- -// KT_WirelessMicTx_MuteSel -//ܴ򿪡رճ -//˵ѡ򿪻߹رվ -//ȫֱ -// 룺bMute_Sel -// أȷ1 0 -// ߣKang Hekai ʱ䣺2014-02-13 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_WirelessMicTx_MuteSel +//功能描述:静音功能打开、关闭程序 +//函数说明:用来选择打开或者关闭静音功能 +//全局变量: +//输 入:bMute_Sel +//返 回:正确:1 错误:0 +//设 计 者:Kang Hekai 时间:2014-02-13 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- BOOL KT_WirelessMicTx_MuteSel(BOOL bMute_Sel) { @@ -358,15 +361,15 @@ BOOL KT_WirelessMicTx_MuteSel(BOOL bMute_Sel) } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_Pilot -//32.768KHzƵźŴ򿪡رճ -//˵ѡǷʹ32.768KHzƵź -//ȫֱ -// 룺bPilot_Dis -// أȷ1 0 -// ߣKang Hekai ʱ䣺2014-02-13 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_WirelessMicTx_Pilot +//功能描述:32.768KHz导频信号打开、关闭程序 +//函数说明:用来选择是否使用32.768KHz导频信号 +//全局变量: +//输 入:bPilot_Dis +//返 回:正确:1 错误:0 +//设 计 者:Kang Hekai 时间:2014-02-13 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- BOOL KT_WirelessMicTx_Pilot(BOOL bPilot_Dis) { @@ -385,15 +388,15 @@ BOOL KT_WirelessMicTx_Pilot(BOOL bPilot_Dis) } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_Pilot_Fdev -//32.768KHzƵźŵƵƫСó -//˵cPilot_FdevΧΪ0-34 -//ȫֱ -// 룺cPilot_Fdev -// أȷ1 0 -// ߣKang Hekai ʱ䣺2014-02-13 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_WirelessMicTx_Pilot_Fdev +//功能描述:32.768KHz导频信号调制频偏大小设置程序 +//函数说明:cPilot_Fdev围为0-3,共4档 +//全局变量: +//输 入:cPilot_Fdev +//返 回:正确:1 错误:0 +//设 计 者:Kang Hekai 时间:2014-02-13 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- BOOL KT_WirelessMicTx_Pilot_Fdev(UINT8 cPilot_Fdev) { @@ -413,15 +416,15 @@ BOOL KT_WirelessMicTx_Pilot_Fdev(UINT8 cPilot_Fdev) #ifdef OTHER_RX //----------------------------------------------------------------------------- -// KT_WirelessMicTx_Set_Pilot_Freq -//õƵƵ -//˵õƵƵ -//ȫֱ -// 룺xtal_sel: 0 or 1 -// أɹ1 ʧܣ0 -// ߣKang Hekai ʱ䣺2014-02-13 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_WirelessMicTx_Set_Pilot_Freq +//功能描述:设置导频频率 +//函数说明:设置导频频率 +//全局变量: +//输 入:xtal_sel: 0 or 1 +//返 回:成功:1; 失败:0 +//设 计 者:Kang Hekai 时间:2014-02-13 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- UINT8 KT_WirelessMicTx_Set_Pilot_Freq(BOOL bXtal_Sel) { @@ -440,17 +443,17 @@ UINT8 KT_WirelessMicTx_Set_Pilot_Freq(BOOL bXtal_Sel) #ifdef RXISKT0616M_XTAL_DUAL //----------------------------------------------------------------------------- -// KT_WirelessMicTx_Calc_ChanReg -//Ƶʿּ -//˵KHzΪλVCOƵ; -// *chan_ptr,*chan_frac_ptr,*chan_frac_msb_ptr -//ȫֱ -// 룺Freq KHzΪλVCOƵʣ -// أȷ1 0 -// ߣYANG Pei ʱ䣺2012-04-19 -// ߣKANG Hekai ʱ䣺2013-03-29 -// V2.0 -// V2.5 ޸<40xtal-40bug +//函 数 名:KT_WirelessMicTx_Calc_ChanReg +//功能描述:晶体的频率控制字计算 +//函数说明:输入以KHz为单位的VCO震荡频率; +// 计算结果存在*chan_ptr,*chan_frac_ptr,*chan_frac_msb_ptr中 +//全局变量: +//输 入:Freq (输入以KHz为单位的VCO频率) +//返 回:正确:1 错误:0 +//设 计 者:YANG Pei 时间:2012-04-19 +//修 改 者:KANG Hekai 时间:2013-03-29 +//版 本:V2.0 +// V2.5 修改余数<40或大于xtal-40的bug //----------------------------------------------------------------------------- BOOL KT_WirelessMicTx_Calc_ChanReg_Old(INT32 Freq, UINT16 *chan_ptr, INT16 *chan_frac_ptr, UINT8 *chan_frac_msb_ptr, UINT16 xtal_freq) @@ -522,15 +525,15 @@ bit selectXtalOld(INT32 Freq) #endif //----------------------------------------------------------------------------- -// KT_WirelessMicTx_BatteryMeter_Read -//صѹȡ -//˵ȡǰĵصѹֵΪ0-2047 -//ȫֱ -// 룺 -// أreg7 & 0x07FFΪ0-2047 -// ߣKANG Hekai ʱ䣺2011-06-10 -// ߣKANG Hekai ʱ䣺2011-06-10 -// V1.0 +//函 数 名:KT_WirelessMicTx_BatteryMeter_Read +//功能描述:电池电压读取程序 +//函数说明:读取当前的电池电压,返回值为0-2047的整数 +//全局变量: +//输 入:无 +//返 回:reg7 & 0x07FF(为0-2047的整数) +//设 计 者:KANG Hekai 时间:2011-06-10 +//修 改 者:KANG Hekai 时间:2011-06-10 +//版 本:V1.0 //----------------------------------------------------------------------------- UINT16 KT_WirelessMicTx_BatteryMeter_Read(void) { @@ -541,19 +544,19 @@ UINT16 KT_WirelessMicTx_BatteryMeter_Read(void) return( reg7 & 0x07FF ); } -// KT_WirelessMicTx_Calc_ChanReg -//Ƶʿּ -//˵KHzΪλVCOƵ; -// *chan_ptr,*chan_frac_ptr,*chan_frac_msb_ptr -//ȫֱ -// 룺Freq KHzΪλVCOƵʣ -// أȷ1 0 -// ߣZhou Dongfeng ʱ䣺2016-04-05 -// ߣZhou Dongfeng ʱ䣺2016-09-02 -// V0.1 For KT0646M_VX -// V0.2 ޸˱ķʽ -// V0.3 ޸vco_lowth -// V0.4 ͳһ˱ʽ +//函 数 名:KT_WirelessMicTx_Calc_ChanReg +//功能描述:晶体的频率控制字计算 +//函数说明:输入以KHz为单位的VCO震荡频率; +// 计算结果存在*chan_ptr,*chan_frac_ptr,*chan_frac_msb_ptr中 +//全局变量: +//输 入:Freq (输入以KHz为单位的VCO频率) +//返 回:正确:1 错误:0 +//设 计 者:Zhou Dongfeng 时间:2016-04-05 +//修 改 者:Zhou Dongfeng 时间:2016-09-02 +//版 本:V0.1 For KT0646M_VX +// V0.2 修改了变量定义的方式 +// V0.3 修改了vco_lowth +// V0.4 统一了变量定义格式 //----------------------------------------------------------------------------- //lopa_div1 * lopa_div2 UINT8 code lopa_div_tab[13]= @@ -587,10 +590,10 @@ BOOL KT_WirelessMicTx_Calc_ChanReg(INT32 Freq, UINT8 data *lopa_div1_ptr,UINT8 d // UINT16 chan_temp; long vco_highth = 4320000; //VCO Range:4.32G-5.76G - //lodiv ֵ + //lodiv 期望值 lopa_div = vco_highth / Freq; - //lodiv ʵֵ + //lodiv 实际值 for(i=0; i<12; i++) { if(lopa_div < lopa_div_tab[i]) @@ -598,15 +601,15 @@ BOOL KT_WirelessMicTx_Calc_ChanReg(INT32 Freq, UINT8 data *lopa_div1_ptr,UINT8 d break; } } - //lopa_div1lopa_div2 + //输出lopa_div1和lopa_div2 *lopa_div1_ptr = lopa_div_tab2[i][1]; *lopa_div2_ptr = lopa_div_tab2[i][0]; - //VCO Ƶ + //计算VCO 频率 Fvco = Freq * lopa_div_tab[i]; - // + //整数 *chan_ptr = Fvco / (xtal_freq * 7) + 1; //dll_mode : *7 - //С + //小数 // chan_frac_d = Fvco; // chan_frac_d = chan_frac_d / (xtal_freq * 7); //31.1221 // chan_frac_d = chan_frac_d - (*chan_ptr); @@ -642,29 +645,29 @@ BOOL KT_WirelessMicTx_Calc_ChanReg(INT32 Freq, UINT8 data *lopa_div1_ptr,UINT8 d return(1); } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_Tune -//Ƶú -//˵KHzΪλķƵʣ -//ȫֱ -// 룺Freq KHzΪλķƵʣ -// أȷ1 0 -// ߣZhou Dongfeng ʱ䣺2016-04-05 -// ߣZhou Dongfeng ʱ䣺2016-08-26 -// V0.1 For KT0646M_VX -// V0.2 ޸˱ķʽVXVX2ĺ궨壬 -// ޸˽DLLֳλ -// ȥ˲õchan_cfg2 -// ȥMCU_POWER_OKλIJѯ -// ȥPLLж -// V0.4 ͳһ˱ʽ +//函 数 名:KT_WirelessMicTx_Tune +//功能描述:发射频率设置函数 +//函数说明:输入以KHz为单位的发射频率, +//全局变量: +//输 入:Freq (输入以KHz为单位的发射频率) +//返 回:正确:1 错误:0 +//设 计 者:Zhou Dongfeng 时间:2016-04-05 +//修 改 者:Zhou Dongfeng 时间:2016-08-26 +//版 本:V0.1 For KT0646M_VX +// V0.2 修改了变量定义的方式并增加了VX和VX2的宏定义, +// 修改了解决DLL不锁定部分程序的位置 +// 去掉了不用的chan_cfg2变量 +// 去掉了MCU_POWER_OK位的查询工作 +// 去掉了PLL锁定的判断 +// V0.4 统一了变量定义格式 //----------------------------------------------------------------------------- -//ʹ24MHzķƵ +//使用24MHz晶振的发射频点 UINT32 code use24M[26] = { 490500,492000,516000,541500,556000,565500,566000,590000,614000,615000,639000,651250,688000, 688500,712000,712250,712500,722500,736500,760500,762000,787500,810000,811500,835500,859500 }; -//ʹ24.576MHzķƵ +//使用24.576MHz晶振的发射频点 UINT32 code use24576M[14] = { 7500,9000,10000,10500,12000,13500,14000,15000,16000,16500,18000,19500,20000,22000 @@ -790,12 +793,19 @@ BOOL KT_WirelessMicTx_Tune(INT32 Freq) #endif #endif - - KT_Bus_Write(0x08,(chan0 << 10) | (lopa_div10 << 8) | (lopa_div20 << 6) | (0 << 5) | - (0 << 4) | (0 <<2) | chan_frac_msb0); // + if(Freq>180000)//大于180MHz + { + KT_Bus_Write(0x08,(chan0 << 10) | (lopa_div10 << 8) | (lopa_div20 << 6) | (0 << 5) | + (0 << 4) | (0 <<2) | chan_frac_msb0); // + } + else//小于180MHz lo_kvco_fine_3x_en=1 + { + KT_Bus_Write(0x08,(chan0 << 10) | (lopa_div10 << 8) | (lopa_div20 << 6) | (0 << 5) | + (1 << 4) | (0 <<2) | chan_frac_msb0); // + } KT_Bus_Write(0x09, chan_frac0|0x0001); - //dllδлҪrst + //dll未锁定,切换晶振后需要rst regx = KT_Bus_Read(0x0e); KT_Bus_Write(0x0e, regx | 0x0080); //dll_rst is from regbank regx = KT_Bus_Read(0x0e); @@ -859,22 +869,27 @@ BOOL KT_WirelessMicTx_Tune(INT32 Freq) regx = (regx&0x0800)>>11; } #endif - + + regx=KT_Bus_Read(0x1f); + KT_Bus_Write(0x1f,regx&~0x4000); //bpsk_dat_en=0 + regx=KT_Bus_Read(0x1f); + KT_Bus_Write(0x1f,regx|0x4000); //bpsk_dat_en=1 + return(1); } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_Set_XTAL -//þƵ -//˵þƵ -//ȫֱ -// 룺xtal_sel: 0 or 1 -// أɹ1 ʧܣ0 -// ߣYANG Pei ʱ䣺2012-04-10 -// ߣZhou Dongfeng ʱ䣺2016-08-26 -// V0.4 -// ߣwu jinfeng ʱ䣺2017-10-19 -// V1.4 soft_rstڼĴ0x3ebit15ˣ0x1ebit4. +//函 数 名:KT_WirelessMicTx_Set_XTAL +//功能描述:设置晶体频率 +//函数说明:设置晶体频率 +//全局变量: +//输 入:xtal_sel: 0 or 1 +//返 回:成功:1; 失败:0 +//设 计 者:YANG Pei 时间:2012-04-10 +//修 改 者:Zhou Dongfeng 时间:2016-08-26 +//版 本:V0.4 +//修 改 者:wu jinfeng 时间:2017-10-19 +//版 本:V1.4 soft_rst不是在寄存器0x3e的bit15了,而是在0x1e的bit4. //----------------------------------------------------------------------------- UINT8 KT_WirelessMicTx_Set_XTAL(BOOL bXtal_Sel) { @@ -901,15 +916,15 @@ UINT8 KT_WirelessMicTx_Set_XTAL(BOOL bXtal_Sel) } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_SW_XTAL_Freq -//лƵ -//˵ -//ȫֱ -// 룺xtal_sel; -// أɹ1 ʧܣ0 -// ߣKANG Hekai ʱ䣺 -// ߣZhou Dongfeng ʱ䣺2016-08-26 -// V0.4 +//函 数 名:KT_WirelessMicTx_SW_XTAL_Freq +//功能描述:切换晶体频率 +//函数说明: +//全局变量:无 +//输 入:xtal_sel; +//返 回:成功:1; 失败:0 +//设 计 者:KANG Hekai 时间: +//修 改 者:Zhou Dongfeng 时间:2016-08-26 +//版 本:V0.4 //----------------------------------------------------------------------------- UINT8 KT_WirelessMicTx_SW_XTAL_Freq(BOOL bXtal_Sel) { @@ -932,15 +947,15 @@ UINT8 KT_WirelessMicTx_SW_XTAL_Freq(BOOL bXtal_Sel) } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_PowerDownProcedure -//ػ -//˵ -//ȫֱ -// 룺; -// أ -// ߣKang Hekai ʱ䣺2014-02-13 -// ߣZhou Dongfeng ʱ䣺2016-08-26 -// V0.4 +//函 数 名:KT_WirelessMicTx_PowerDownProcedure +//功能描述:关机处理程序 +//函数说明: +//全局变量:无 +//输 入:无; +//返 回:无 +//设 计 者:Kang Hekai 时间:2014-02-13 +//修 改 者:Zhou Dongfeng 时间:2016-08-26 +//版 本:V0.4 //----------------------------------------------------------------------------- void KT_WirelessMicTx_PowerDownProcedure(void) { @@ -964,23 +979,23 @@ void KT_WirelessMicTx_PowerDownProcedure(void) } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_ECHO -//ECHOó -//˵ECHOЧ -//ȫֱ -// 룺bEcho_Dis ECHOأ -// Echo_Ratio ECHO -// Echo_Delay ECHOʱ -// أ -// ߣZhou Dongfeng ʱ䣺2016-04-26 -// ߣ ʱ䣺 -// V0.1 For KT0646M_VX -// V0.2 echoرյʱ򣬲echoǰEcho_Ratioд0 +//函 数 名:KT_WirelessMicTx_ECHO +//功能描述:ECHO混响配置程序 +//函数说明:配置ECHO混响效果 +//全局变量: +//输 入:bEcho_Dis (ECHO开关) +// Echo_Ratio (ECHO反馈) +// Echo_Delay (ECHO延时) +//返 回:无 +//设 计 者:Zhou Dongfeng 时间:2016-04-26 +//修 改 者: 时间: +//版 本:V0.1 For KT0646M_VX +//版 本:V0.2 echo关闭的时候,不真正关echo而是把Echo_Ratio写成0 //----------------------------------------------------------------------------- void KT_WirelessMicTx_ECHO(BOOL bEcho_Dis,UINT8 Echo_Ratio,UINT8 Echo_Delay) { UINT16 regx; - if(bEcho_Dis==1)//echo disable ʱ򣬲echoǰEcho_Ratioд0redmine#11824 + if(bEcho_Dis==1)//echo disable 的时候,不真正关echo而是把Echo_Ratio写成0,见redmine#11824 { KT_Bus_Write( 0x32, (ECHO_MCU << 15) | (0 << 14) | (ECHO_STRU << 13) | (0 << 8) | (Echo_Delay << 3) | ECHO_GAINUP ); @@ -995,15 +1010,15 @@ void KT_WirelessMicTx_ECHO(BOOL bEcho_Dis,UINT8 Echo_Ratio,UINT8 Echo_Delay) } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_EQSW -//EQس -//˵EQر -//ȫֱ -// 룺bEq_Dis EQأ -// أ -// ߣZhou Dongfeng ʱ䣺2016-08-26 -// ߣ ʱ䣺 -// V0.4 +//函 数 名:KT_WirelessMicTx_EQSW +//功能描述:EQ均衡器开关程序 +//函数说明:配置EQ均衡器开启关闭 +//全局变量: +//输 入:bEq_Dis (EQ开关) +//返 回:无 +//设 计 者:Zhou Dongfeng 时间:2016-08-26 +//修 改 者: 时间: +//版 本:V0.4 //----------------------------------------------------------------------------- void KT_WirelessMicTx_EQSW(BOOL bEq_Dis) { @@ -1014,16 +1029,16 @@ void KT_WirelessMicTx_EQSW(BOOL bEq_Dis) } //----------------------------------------------------------------------------- -// KT_WirelessMicTx_EQGAIN -//EQó -//˵EQƵЧ -//ȫֱ -// 룺Eq_Freq EQƵʣ -// Eq_Gain EQ棩 -// أ -// ߣZhou Dongfeng ʱ䣺2016-04-26 -// ߣZhou Dongfeng ʱ䣺2016-08-26 -// V0.4 +//函 数 名:KT_WirelessMicTx_EQGAIN +//功能描述:EQ均衡器配置程序 +//函数说明:配置EQ均衡器各频率增益效果 +//全局变量: +//输 入:Eq_Freq (EQ频率) +// Eq_Gain (EQ增益) +//返 回:无 +//设 计 者:Zhou Dongfeng 时间:2016-04-26 +//修 改 者:Zhou Dongfeng 时间:2016-08-26 +//版 本:V0.4 //----------------------------------------------------------------------------- void KT_WirelessMicTx_EQGAIN(UINT8 Eq_Freq,UINT8 Eq_Gain) { @@ -1119,3 +1134,22 @@ void KT_WirelessMicTx_EQGAIN(UINT8 Eq_Freq,UINT8 Eq_Gain) } */ } +void KT_WirelessMicTx_COMPANDOR_Dis(BOOL COMP_Dis)//COMP_Dis=1 disable COMPANDOR;COMP_En=0 enable COMPANDOR +{ + UINT16 regx; + regx = KT_Bus_Read(0x1C); + if(COMP_Dis) + { + KT_Bus_Write(0x1C, regx|0x0010);//dis COMPANDOR + regx = KT_Bus_Read(0x1D); + KT_Bus_Write(0x1D, (regx&0x8000)|0x4000); + regx = KT_Bus_Read(0x1E); + KT_Bus_Write(0x1E, regx&0xfff0); + } + else + { + KT_Bus_Write(0x1C, regx&~0x0010);//en COMPANDOR + } +} + + diff --git a/democode/KT0646M_demoboard/c/LCD_KEY.c b/democode/KT0646M_demoboard/c/LCD_KEY.c index b9b8cfe..4acff50 100644 --- a/democode/KT0646M_demoboard/c/LCD_KEY.c +++ b/democode/KT0646M_demoboard/c/LCD_KEY.c @@ -5,16 +5,16 @@ // Revision History // Version Date Description // V1.0 2012-08-01 Initial draft -// V1.1 2013-11-22 ıͶ巽 -// V1.2 2017-02-08 ʽ淶 -// V0.3 2017-04-27 ӼƵʵʱȰѵƵˣtunęٻָԭƵãmain.c -// ̨һֱͬIJtunęһʱ󲽽410main.c +// V1.1 2013-11-22 改变变量类型定义方法 +// V1.2 2017-02-08 格式规范化整理 +// V0.3 2017-04-27 加减频率的时候,先把导频关了,tune完台后再恢复原来导频的设置(main.c) +// 调台中一直以相同的步进进行tune台,不会调一段时间后步进变成4倍和10倍(main.c) //----------------------------------------------------------------------------- // Includes //----------------------------------------------------------------------------- #include "KT_WirelessMicTxdrv.h" -//1621ʾƵֵʾ +//1621显示屏频率值显示定义 UINT8 code FREQ_NUM[] ={ FREQ_ZERO_A, FREQ_ZERO_B, FREQ_ZERO_C, FREQ_ZERO_D, FREQ_ONE_A, FREQ_ONE_B, FREQ_ONE_C, FREQ_ONE_D, FREQ_TWO_A, FREQ_TWO_B, FREQ_TWO_C, FREQ_TWO_D, @@ -27,7 +27,7 @@ UINT8 code FREQ_NUM[] ={ FREQ_ZERO_A, FREQ_ZERO_B, FREQ_ZERO_C, FREQ FREQ_NINE_A, FREQ_NINE_B, FREQ_NINE_C, FREQ_NINE_D }; -//1621ʾֵͨʾ +//1621显示屏通道值显示定义 UINT8 code CH_NUM[] ={ CH_ZERO_A, CH_ZERO_B, CH_ONE_A, CH_ONE_B, CH_TWO_A, CH_TWO_B, @@ -40,7 +40,7 @@ UINT8 code CH_NUM[] ={ CH_ZERO_A, CH_ZERO_B, CH_NINE_A, CH_NINE_B }; -//1621ʾRFźǿʾ +//1621显示屏RF信号强度显示定义 UINT8 xdata RF = 0<<3; UINT8 xdata RF_S1 = 0<<2; UINT8 xdata RF_S2 = 0<<3; @@ -51,10 +51,10 @@ UINT8 xdata RF_S6 = 0<<2; UINT8 xdata RF_S7 = 0<<3; -//1621ʾ־ʾ +//1621显示屏特殊标志显示定义 UINT8 xdata Dot = 1<<2,K4 = 0<<3,MHz = 1<<3; -//1621ʾAudioźǿʾ +//1621显示屏Audio信号强度显示定义 UINT8 xdata AF = 0<<3; UINT8 xdata AF_S8 = 0<<2; UINT8 xdata AF_S9 = 0<<2; @@ -65,15 +65,15 @@ UINT8 xdata AF_S13 = 0<<2; UINT8 xdata AF_S14 = 0<<3; //----------------------------------------------------------------------------- -// Delay_us -//usʱ -//˵ -//ȫֱ -// 룺iTime_Number -// أ -// ߣZDF ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// +//函 数 名:Delay_us +//功能描述:us级延时 +//函数说明: +//全局变量:无 +//输 入:iTime_Number +//返 回:无 +//设 计 者:ZDF 时间:2012-08-01 +//修 改 者: 时间: +//版 本: //----------------------------------------------------------------------------- void Delay_us(UINT8 iTime_Number) { @@ -86,15 +86,15 @@ void Delay_us(UINT8 iTime_Number) } //----------------------------------------------------------------------------- -// Delay_ms -//msʱ -//˵ -//ȫֱ -// 룺iTime_Number -// أ -// ߣZhou Dongfeng ʱ䣺2015-12-23 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:Delay_ms +//功能描述:ms级延时 +//函数说明: +//全局变量:无 +//输 入:iTime_Number +//返 回:无 +//设 计 者:Zhou Dongfeng 时间:2015-12-23 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void Delay_ms(UINT16 iTime_Number) { @@ -111,35 +111,35 @@ void Delay_ms(UINT16 iTime_Number) } //----------------------------------------------------------------------------- -// Key_Scan -//ɨ -//˵ -//ȫֱ -// 룺 -// أkey_value -// ߣKanghekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// +//函 数 名:Key_Scan +//功能描述:键盘扫描程序 +//函数说明: +//全局变量:无 +//输 入:无 +//返 回:key_value +//设 计 者:Kanghekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本: //----------------------------------------------------------------------------- UINT8 Key_Scan (void) { INT8 key_value=0; - if(Key_UP==0) // жǷм + if(Key_UP==0) // 判断是否有键按下 { - Delay_ms(100); // ʱȥ + Delay_ms(100); // 延时去抖动 if(Key_UP==0) key_value=1; } - else if(Key_DOWN==0) // жǷм + else if(Key_DOWN==0) // 判断是否有键按下 { - Delay_ms(100); // ʱȥ + Delay_ms(100); // 延时去抖动 if (Key_DOWN==0) key_value=2; } - else if(Key_SET==0) // жǷм + else if(Key_SET==0) // 判断是否有键按下 { - Delay_ms(100); // ʱȥ + Delay_ms(100); // 延时去抖动 if (Key_SET==0) key_value=3; } @@ -149,19 +149,19 @@ UINT8 Key_Scan (void) } //----------------------------------------------------------------------------- -// LCD_Init -//LCDʼ -//˵ -//ȫֱ -// 룺 -// أ -// ߣKanghekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// +//函 数 名:LCD_Init +//功能描述:LCD初始化 +//函数说明: +//全局变量:无 +//输 入:无 +//返 回:无 +//设 计 者:Kanghekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本: //----------------------------------------------------------------------------- void LCD_Init(void) { - LCD_LED=0; // + LCD_LED=0; // 开背光 LCD_CS = 1; Delay_us(50); @@ -223,17 +223,17 @@ void LCD_Init(void) } //----------------------------------------------------------------------------- -// SendBit_1621 -//ģʽ -//˵ -//ȫֱ -// 룺cSenddata;cCounter -// أ -// ߣKanghekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// +//函 数 名:SendBit_1621 +//功能描述:设置模式 +//函数说明: +//全局变量:无 +//输 入:cSenddata;cCounter +//返 回:无 +//设 计 者:Kanghekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本: //----------------------------------------------------------------------------- -void SendBit_1621(UINT8 cSenddata, UINT8 cCounter) //dataĸλдHT1621λǰ +void SendBit_1621(UINT8 cSenddata, UINT8 cCounter) //data的高位先写入HT1621,高位在前 { UINT8 i; @@ -251,17 +251,17 @@ void SendBit_1621(UINT8 cSenddata, UINT8 cCounter) //data } //----------------------------------------------------------------------------- -// SendComBit_1621 -//д -//˵ -//ȫֱ -// 룺cSenddata -// أ -// ߣKanghekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// +//函 数 名:SendComBit_1621 +//功能描述:写数据 +//函数说明: +//全局变量:无 +//输 入:cSenddata +//返 回:无 +//设 计 者:Kanghekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本: //----------------------------------------------------------------------------- -void SendComBit_1621(UINT8 cSenddata) //dataĵλдHT1621λǰ +void SendComBit_1621(UINT8 cSenddata) //data的低位先写入HT1621,低位在前 { UINT8 i; @@ -278,15 +278,15 @@ void SendComBit_1621(UINT8 cSenddata) //data } //----------------------------------------------------------------------------- -// WriteFix_1621 -//д -//˵ -//ȫֱ -// 룺iSenddata -// أ -// ߣKanghekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// +//函 数 名:WriteFix_1621 +//功能描述:写数据 +//函数说明: +//全局变量:无 +//输 入:iSenddata +//返 回:无 +//设 计 者:Kanghekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本: //----------------------------------------------------------------------------- void WriteFix_1621(UINT16 iSenddata) { @@ -294,15 +294,15 @@ void WriteFix_1621(UINT16 iSenddata) } //----------------------------------------------------------------------------- -// Write_1621 -//дַ -//˵ -//ȫֱ -// 룺CAddr,cCom -// أ -// ߣKanghekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// +//函 数 名:Write_1621 +//功能描述:写地址 +//函数说明: +//全局变量:无 +//输 入:CAddr,cCom +//返 回:无 +//设 计 者:Kanghekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本: //----------------------------------------------------------------------------- void Write_1621(UINT8 cAddr,UINT8 cCom) { @@ -319,15 +319,15 @@ void Write_1621(UINT8 cAddr,UINT8 cCom) } //----------------------------------------------------------------------------- -// Scan_segs -//ʾ -//˵ -//ȫֱ -// 룺dByte;Tscan -// أ -// ߣZDF ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// +//函 数 名:Scan_segs +//功能描述:连续显示 +//函数说明: +//全局变量:无 +//输 入:dByte;Tscan +//返 回:无 +//设 计 者:ZDF 时间:2012-08-01 +//修 改 者: 时间: +//版 本: //----------------------------------------------------------------------------- void Scan_segs(UINT8 dByte, UINT16 Tscan) { @@ -349,15 +349,15 @@ void Scan_segs(UINT8 dByte, UINT16 Tscan) } //----------------------------------------------------------------------------- -// Display_Frequency_and_RFPower -//Ƶʺͷ书ʾ -//˵ -//ȫֱ -// 룺lFreq -// أ -// ߣKanghekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// +//函 数 名:Display_Frequency_and_RFPower +//功能描述:频率和发射功率显示 +//函数说明: +//全局变量:无 +//输 入:lFreq +//返 回:无 +//设 计 者:Kanghekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本: //----------------------------------------------------------------------------- void Display_Frequency_and_RFPower(INT32 lFreq) { @@ -404,15 +404,15 @@ void Display_Frequency_and_RFPower(INT32 lFreq) } //----------------------------------------------------------------------------- -// RF_Power -//Ƶʼл -//˵ -//ȫֱ -// 룺cPower_Level -// أ -// ߣKanghekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// +//函 数 名:RF_Power +//功能描述:射频功率级别切换 +//函数说明: +//全局变量: +//输 入:cPower_Level +//返 回:无 +//设 计 者:Kanghekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本: //----------------------------------------------------------------------------- void RF_Power(UINT8 cPower_Level) { @@ -512,15 +512,15 @@ void RF_Power(UINT8 cPower_Level) #ifdef KT0616M //----------------------------------------------------------------------------- -// Audio_Lever -//ָʾл -//˵ -//ȫֱ -// 룺cAF_Level -// أ -// ߣKanghekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// +//函 数 名:Audio_Lever +//功能描述:音量指示级别切换 +//函数说明: +//全局变量: +//输 入:cAF_Level +//返 回:无 +//设 计 者:Kanghekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本: //----------------------------------------------------------------------------- void Audio_Lever(UINT8 cAF_Level) { @@ -620,15 +620,15 @@ void Audio_Lever(UINT8 cAF_Level) #endif //----------------------------------------------------------------------------- -// Display_Freq_Num -//Ƶʾ -//˵ -//ȫֱ -// 룺cAddress,cNum -// أ -// ߣKanghekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// +//函 数 名:Display_Freq_Num +//功能描述:频率数字显示驱动 +//函数说明: +//全局变量:无 +//输 入:cAddress,cNum +//返 回:无 +//设 计 者:Kanghekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本: //----------------------------------------------------------------------------- void Display_Freq_Num(UINT8 cAddress, UINT8 cNum) { @@ -701,15 +701,15 @@ void Display_Freq_Num(UINT8 cAddress, UINT8 cNum) } //----------------------------------------------------------------------------- -// Display_Ch_Num -//Ƶʾ -//˵ -//ȫֱ -// 룺address,num -// أ -// ߣKanghekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// +//函 数 名:Display_Ch_Num +//功能描述:频道显示 +//函数说明: +//全局变量:无 +//输 入:address,num +//返 回:无 +//设 计 者:Kanghekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本: //----------------------------------------------------------------------------- void Display_Ch_Num(UINT8 address, UINT8 num) { diff --git a/democode/KT0646M_demoboard/c/main.c b/democode/KT0646M_demoboard/c/main.c index ef16a0b..f27f75c 100644 --- a/democode/KT0646M_demoboard/c/main.c +++ b/democode/KT0646M_demoboard/c/main.c @@ -4,10 +4,10 @@ //***************************************************************************** // Revision History // Version Date Description -// V1.0 2016-04-26 ʼ汾 -// V1.1 2017-02-08 ʽ淶 -// V0.3 2017-04-27 ӼƵʵʱȰѵƵˣtunęٻָԭƵãmain.c -// ̨һֱͬIJtunęһʱ󲽽410main.c +// V1.0 2016-04-26 初始版本 +// V1.1 2017-02-08 格式规范化整理 +// V0.3 2017-04-27 加减频率的时候,先把导频关了,tune完台后再恢复原来导频的设置(main.c) +// 调台中一直以相同的步进进行tune台,不会调一段时间后步进变成4倍和10倍(main.c) //***************************************************************************** //----------------------------------------------------------------------------- @@ -24,19 +24,19 @@ extern BOOL Int_Mode_Flag; extern UINT8 xdata IRDataCode[4]; #endif -BOOL temp_RF_POW_SW=0; //书״̬ʱ洢 +BOOL temp_RF_POW_SW=0; //发射功率状态临时存储 //----------------------------------------------------------------------------- -// main -// -//˵ -//ȫֱ -// 룺 -// أ -// ߣZhou Dongfeng ʱ䣺2015-12-28 -// ߣZhou Dongfeng ʱ䣺2016-01-28 -// V2.0 Զ̨Ƶѡ +//函 数 名:main +//功能描述:主程序 +//函数说明: +//全局变量:无 +//输 入: +//返 回:无 +//设 计 者:Zhou Dongfeng 时间:2015-12-28 +//修 改 者:Zhou Dongfeng 时间:2016-01-28 +//版 本:V2.0 增加了自动搜台与红外对频选项 //----------------------------------------------------------------------------- void main (void) { @@ -59,7 +59,7 @@ void main (void) { if ((lCounter >= 0x20000)) { - LCD_LED = 1; // ر + LCD_LED = 1; // 关背光 KT_MicTX_Batter_Detecter(); if(RF_POW_SW != temp_RF_POW_SW) { @@ -81,8 +81,8 @@ void main (void) } #ifdef IR_RECEIVE -//IRDataCode[1]ĸ4bitΪַͨAB·ֱ8bitΪƵϢλ -//IRDataCode[2]ΪƵϢλIRDataCode[3]ΪƵϢλ +//IRDataCode[1]的高4bit为通道地址,区分A、B路手柄,低8bit为频率信息的最高位, +//IRDataCode[2]为频率信息的中位,IRDataCode[3]为频率信息的最低位 if(KT_IRB_ADDRESS == (IRDataCode[1] & 0xF0) ) { IRDataCode[1] &= 0x0F; @@ -98,15 +98,15 @@ void main (void) } //----------------------------------------------------------------------------- -// KT_MicTX_Init -//оƬʼ -//˵ -//ȫֱMemery_Frequency; Load_Frequency; -// 룺 -// أ -// ߣKANG Hekai ʱ䣺2012-08-01 -// ߣZhou Dongfeng ʱ䣺2015-12-28 -// V1.0 +//函 数 名:KT_MicTX_Init +//功能描述:芯片初始化 +//函数说明: +//全局变量:Memery_Frequency; Load_Frequency; +//输 入: +//返 回:无 +//设 计 者:KANG Hekai 时间:2012-08-01 +//修 改 者:Zhou Dongfeng 时间:2015-12-28 +//版 本:V1.0 //----------------------------------------------------------------------------- void KT_MicTX_Init(void) { @@ -146,23 +146,23 @@ void KT_MicTX_Init(void) } //----------------------------------------------------------------------------- -// PORT_Init -//MCU˿ڳʼ -//˵Configure the Crossbar and GPIO ports. -//ȫֱ -// 룺 -// أ -// ߣZhou Dongfeng ʱ䣺2015-12-22 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:PORT_Init +//功能描述:MCU端口初始化 +//函数说明:Configure the Crossbar and GPIO ports. +//全局变量:无 +//输 入: +//返 回:无 +//设 计 者:Zhou Dongfeng 时间:2015-12-22 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void PORT_Init(void) { - // PX M0 M1 IO״̬ - //Ϊ 0 0 Ϊ ׼˫ģʽ - //Ϊ 0 1 Ϊ ģʽ - //Ϊ 1 0 Ϊ ģʽ(̬) - //Ϊ 1 1 Ϊ ©ģʽ + // PX M0 M1 设置IO口状态, + //当为 0 0 则为 准双向模式, + //当为 0 1 则为 推挽输出模式, + //当为 1 0 则为 输入模式(高阻态), + //当为 1 1 则为 开漏模式, P1M0 = 0x44; P1M1 = 0x83; P1 = 0xbc; @@ -177,15 +177,15 @@ void PORT_Init(void) } //----------------------------------------------------------------------------- -// SYSCLK_Init -//MCUʱӳʼ -//˵use the internal 16.6MHz -//ȫֱ -// 룺 -// أ -// ߣZhou Dongfeng ʱ䣺2014-04-11 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:SYSCLK_Init +//功能描述:MCU时钟初始化 +//函数说明:use the internal 16.6MHz +//全局变量:无 +//输 入: +//返 回:无 +//设 计 者:Zhou Dongfeng 时间:2014-04-11 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void SYSCLK_Init(void) { @@ -198,22 +198,22 @@ void SYSCLK_Init(void) } //----------------------------------------------------------------------------- -// KT_MicTX_PowerDown_Detecter -//ػ -//˵ -//ȫֱ -// 룺 -// أ -// ߣZhou Dongfeng ʱ䣺2015-12-28 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_MicTX_PowerDown_Detecter +//功能描述:关机程序 +//函数说明: +//全局变量: +//输 入:无 +//返 回:无 +//设 计 者:Zhou Dongfeng 时间:2015-12-28 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void KT_MicTX_PowerDown_Detecter (void) { if(VBAT_IN == 0) { Delay_ms(5); - if(VBAT_IN == 0) //ֹݷŵ粻ɾϵ + if(VBAT_IN == 0) //防止电容放电不干净反复上电 { if( Memery_Frequency != Load_Frequency ) Save_Freq(); @@ -229,15 +229,15 @@ void KT_MicTX_PowerDown_Detecter (void) } //----------------------------------------------------------------------------- -// KT_MicTX_Batter_Detecter -//صѹⲢʾ -//˵ -//ȫֱ -// 룺 -// أ -// ߣKANG Hekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_MicTX_Batter_Detecter +//功能描述:电池电压监测并显示 +//函数说明: +//全局变量:无 +//输 入: +//返 回:无 +//设 计 者:KANG Hekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void KT_MicTX_Batter_Detecter (void) { @@ -264,35 +264,35 @@ void KT_MicTX_Batter_Detecter (void) } //----------------------------------------------------------------------------- -// KT_MicTX_RFSwitch -//书л -//˵ -//ȫֱtemp_RF_POW_SW -// 룺 -// أ -// ߣKANG Hekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_MicTX_RFSwitch +//功能描述:发射功率切换 +//函数说明: +//全局变量:temp_RF_POW_SW +//输 入: +//返 回:无 +//设 计 者:KANG Hekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void KT_MicTX_RFSwitch (void) { if (RF_POW_SW == 0) { - if(Key_RF_POW_flag)//ȥ + if(Key_RF_POW_flag)//去抖 Delay_ms(100); if (RF_POW_SW == 0) { - KT_WirelessMicTx_PAGain(10); //10dBm7dBm + KT_WirelessMicTx_PAGain(10); //差分10dBm,单端7dBm RF_Power(3); } } else { - if(Key_RF_POW_flag)//ȥ + if(Key_RF_POW_flag)//去抖 Delay_ms(100); if (RF_POW_SW == 1) { - KT_WirelessMicTx_PAGain(42); //18dBm15dBm + KT_WirelessMicTx_PAGain(42); //差分18dBm,单端15dBm RF_Power(7); } } @@ -301,24 +301,24 @@ void KT_MicTX_RFSwitch (void) } //----------------------------------------------------------------------------- -// KT_MicTX_Next_Fre -//ƵʼBAND_STEP4BAND_STEP40BAND_STEP -//˵ -//ȫֱMemery_Frequency; Key_UP_flag; Key_DOWN_flag; -// 룺 -// أ -// ߣKANG Hekai ʱ䣺2012-08-01 -// ߣKANG Hekai ʱ䣺2013-03-29 -// V1.2 -// V1.5 2013-03-29 лƵʺRFصλþ书 -// V1.6 2017-04-27 ƵʵʱȰѵƵˣtunęٻָԭƵ -// ̨һֱͬIJtunęһʱ󲽽410 -//----------------------------------------------------------------------------- -void KT_MicTX_Next_Fre (void) // 250KHz +//函 数 名:KT_MicTX_Next_Fre +//功能描述:频率加BAND_STEP,长按加4倍的BAND_STEP,超长按加40倍的BAND_STEP +//函数说明: +//全局变量:Memery_Frequency; Key_UP_flag; Key_DOWN_flag; +//输 入: +//返 回:无 +//设 计 者:KANG Hekai 时间:2012-08-01 +//修 改 者:KANG Hekai 时间:2013-03-29 +//版 本:V1.2 +// V1.5 2013-03-29 切换频率后检测RF开关的位置决定发射功率 +// V1.6 2017-04-27 加频率的时候,先把导频关了,tune完台后再恢复原来导频的设置 +// 调台中一直以相同的步进进行tune台,不会调一段时间后步进变成4倍和10倍 +//----------------------------------------------------------------------------- +void KT_MicTX_Next_Fre (void) // 加250KHz { UINT16 pilotSave; Key_RF_POW_flag = 0; - pilotSave=KT_Bus_Read(0x1F); //Ƶ + pilotSave=KT_Bus_Read(0x1F); //读导频的设置 KT_WirelessMicTx_Pilot(PILOT_DISABLE); KT_WirelessMicTx_PAGain(0); KT_WirelessMicTx_PASW(PA_OFF); @@ -338,29 +338,29 @@ void KT_MicTX_Next_Fre (void) // KT_WirelessMicTx_Tune(Memery_Frequency); KT_MicTX_RFSwitch(); KT_WirelessMicTx_PASW(PA_ON); - KT_Bus_Write(0x1F,pilotSave);//ָƵ + KT_Bus_Write(0x1F,pilotSave);//恢复导频的设置 Key_RF_POW_flag = 1; } //----------------------------------------------------------------------------- -// KT_MicTX_Previous_Fre -//ƵʼBAND_STEP4BAND_STEP20BAND_STEP -//˵ -//ȫֱMemery_Frequency; Key_UP_flag; Key_DOWN_flag; -// 룺 -// أ -// ߣKANG Hekai ʱ䣺2012-08-01 -// ߣKANG Hekai ʱ䣺2013-03-29 -// V1.2 -// V1.5 2013-03-29 лƵʺRFصλþ书 -// V1.6 2017-04-27 ƵʵʱȰѵƵˣtunęٻָԭƵ -// ̨һֱͬIJtunęһʱ󲽽410 -//----------------------------------------------------------------------------- -void KT_MicTX_Previous_Fre (void) // 250KHz +//函 数 名:KT_MicTX_Previous_Fre +//功能描述:频率减BAND_STEP,长按减4倍的BAND_STEP,超长按减20倍的BAND_STEP +//函数说明: +//全局变量:Memery_Frequency; Key_UP_flag; Key_DOWN_flag; +//输 入: +//返 回:无 +//设 计 者:KANG Hekai 时间:2012-08-01 +//修 改 者:KANG Hekai 时间:2013-03-29 +//版 本:V1.2 +// V1.5 2013-03-29 切换频率后检测RF开关的位置决定发射功率 +// V1.6 2017-04-27 减频率的时候,先把导频关了,tune完台后再恢复原来导频的设置 +// 调台中一直以相同的步进进行tune台,不会调一段时间后步进变成4倍和10倍 +//----------------------------------------------------------------------------- +void KT_MicTX_Previous_Fre (void) // 减250KHz { UINT16 pilotSave; Key_RF_POW_flag = 0; - pilotSave=KT_Bus_Read(0x1F); //Ƶ + pilotSave=KT_Bus_Read(0x1F); //读导频的设置 KT_WirelessMicTx_Pilot(PILOT_DISABLE); KT_WirelessMicTx_PAGain(0); KT_WirelessMicTx_PASW(PA_OFF); @@ -380,33 +380,33 @@ void KT_MicTX_Previous_Fre (void) // KT_WirelessMicTx_Tune(Memery_Frequency); KT_MicTX_RFSwitch(); KT_WirelessMicTx_PASW(PA_ON); - KT_Bus_Write(0x1F,pilotSave);//ָƵ + KT_Bus_Write(0x1F,pilotSave);//恢复导频的设置 Key_RF_POW_flag = 1; } //----------------------------------------------------------------------------- -// KT_MicTX_Mute -//ھģʽر仯 -//˵ -//ȫֱKey_UP_flag; Key_DOWN_flag; -// 룺 -// أ -// ߣKANG Hekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:KT_MicTX_Mute +//功能描述:按下在静音和有声两种模式下来回变化 +//函数说明: +//全局变量:Key_UP_flag; Key_DOWN_flag; +//输 入: +//返 回:无 +//设 计 者:KANG Hekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void KT_MicTX_Mute (void) { UINT16 reg1C; reg1C = KT_Bus_Read(0x1C); - if( (reg1C & 0x0001) == 0) // ¼龲־λ־Ϊ + if( (reg1C & 0x0001) == 0) // 按键按下检查静音标志位,如果静音标志为低则静音 { KT_WirelessMicTx_MuteSel(AUDIO_MUTE); KT_WirelessMicTx_Pilot(PILOT_DISABLE); WriteFix_1621(LCD_MUTE); } - else // ¼龲־λ־Ϊȡ + else // 按键按下检查静音标志位,如果静音标志为高则取消静音 { KT_WirelessMicTx_MuteSel(AUDIO_UNMUTE); KT_WirelessMicTx_Pilot(PILOT_ENABLE); @@ -417,15 +417,15 @@ void KT_MicTX_Mute (void) } //----------------------------------------------------------------------------- -// Erase_Eeprom -//EEPROM -//˵ -//ȫֱ -// 룺uchar page -// أ -// ߣZhou Dongfeng ʱ䣺2015-12-23 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:Erase_Eeprom +//功能描述:擦除EEPROM +//函数说明: +//全局变量:无 +//输 入:uchar page +//返 回:无 +//设 计 者:Zhou Dongfeng 时间:2015-12-23 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void Erase_Eeprom (UINT8 page) { @@ -449,15 +449,15 @@ void Erase_Eeprom (UINT8 page) } //----------------------------------------------------------------------------- -// Write_Eeprom -//EEPROMд -//˵EEPROM,ָλдһֽ -//ȫֱ -// 룺wr_data:Ҫдݡoffsetλ -// أ -// ߣZhou Dongfeng ʱ䣺2015-12-23 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:Write_Eeprom +//功能描述:EEPROM写程序 +//函数说明:EEPROM,在指定位置写入一个字节数据 +//全局变量:无 +//输 入:wr_data:要写入的数据、offset:位置 +//返 回:无 +//设 计 者:Zhou Dongfeng 时间:2015-12-23 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void Write_Eeprom(UINT8 wr_data,UINT8 page,UINT8 offset) { @@ -482,15 +482,15 @@ void Write_Eeprom(UINT8 wr_data,UINT8 page,UINT8 offset) } //----------------------------------------------------------------------------- -// Read_Eeprom -//EEPROMByte -//˵ȡEEPROMָλֽ -//ȫֱ -// 룺addr:ַ -// أ -// ߣZhou Dongfeng ʱ䣺2015-12-23 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:Read_Eeprom +//功能描述:EEPROM读Byte程序 +//函数说明:读取EEPROM指定位置字节数据 +//全局变量:无 +//输 入:addr:地址 +//返 回:的数 +//设 计 者:Zhou Dongfeng 时间:2015-12-23 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- UINT8 Read_Eeprom(UINT8 code *addr) { @@ -504,15 +504,15 @@ UINT8 Read_Eeprom(UINT8 code *addr) } //----------------------------------------------------------------------------- -// Load_Freq -//ȡMCUFLASHƵֵ -//˵ -//ȫֱLoad_Frequency -// 룺 -// أ -// ߣKANG Hekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:Load_Freq +//功能描述:读取保存在MCU的FLASH里的频率值 +//函数说明: +//全局变量:Load_Frequency +//输 入: +//返 回:无 +//设 计 者:KANG Hekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void Load_Freq (void) { @@ -525,15 +525,15 @@ void Load_Freq (void) } //----------------------------------------------------------------------------- -// Save_Freq -//ƵʱMCUFLASH -//˵ -//ȫֱMemery_Frequency -// 룺 -// أ -// ߣKANG Hekai ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:Save_Freq +//功能描述:将频率保存在MCU的FLASH里 +//函数说明: +//全局变量:Memery_Frequency +//输 入: +//返 回:无 +//设 计 者:KANG Hekai 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void Save_Freq (void) { @@ -554,15 +554,15 @@ void Save_Freq (void) // //----------------------------------------------------------------------------- -// timer0Init -//ʱ0ʼ -//˵default 1/12 system clock -//ȫֱ -// 룺 -// أ -// ߣPAE ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:timer0Init +//功能描述:定时器0初始化 +//函数说明:default 1/12 system clock +//全局变量:无 +//输 入:无 +//返 回:无 +//设 计 者:PAE 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void timer0Init(void) { @@ -573,51 +573,51 @@ void timer0Init(void) } //----------------------------------------------------------------------------- -// ex2Init -//ⲿж2ʼ -//˵ -//ȫֱ -// 룺 -// أ -// ߣPAE ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:ex2Init +//功能描述:外部中断2初始化 +//函数说明: +//全局变量:无 +//输 入:无 +//返 回:无 +//设 计 者:PAE 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void ex2Init(void) { - EXF0 = 0x04;//½ش + EXF0 = 0x04;//下降沿触发 IEN1 |= 0x04;//ex2=1 EA = 1; } //----------------------------------------------------------------------------- -// ex2Int -//ⲿж2жϷ -//˵ -//ȫֱ -// 룺 -// أ -// ߣPAE ʱ䣺2012-08-01 -// ߣ ʱ䣺 -// V1.0 +//函 数 名:ex2Int +//功能描述:外部中断2中断服务程序 +//函数说明: +//全局变量:无 +//输 入:无 +//返 回:无 +//设 计 者:PAE 时间:2012-08-01 +//修 改 者: 时间: +//版 本:V1.0 //----------------------------------------------------------------------------- void ex2Int(void) interrupt 9 { - IEN1 &= ~0x04; //EX2=0ⲿж2 - TR0 = 0; //ֹͣʱ0 + IEN1 &= ~0x04; //EX2=0,外部中断2 + TR0 = 0; //停止定时器0 IR_Counter = TH0; IR_Counter = (IR_Counter << 8) | TL0; TL0 = 0; TH0 = 0; - TR0 = 1; //ʱ0 + TR0 = 1; //启动定时器0 if(EXF0==0x08) {Int_Mode_Flag=0;} else {Int_Mode_Flag=1;} EXF0 ^=0x0c; - //빦ʱû + //红外对码功能暂时没有添加 //Task_IR(); - IEN1 |= 0x04; //EX2=1ⲿж2ʹ + IEN1 |= 0x04; //EX2=1,外部中断2使能 } #endif diff --git a/democode/KT0646M_demoboard/h/KT_WirelessMicTxdrv.h b/democode/KT0646M_demoboard/h/KT_WirelessMicTxdrv.h index 170729a..96e89ed 100644 --- a/democode/KT0646M_demoboard/h/KT_WirelessMicTxdrv.h +++ b/democode/KT0646M_demoboard/h/KT_WirelessMicTxdrv.h @@ -6,23 +6,25 @@ // Revision History // Version Date Description // V0.1 2016-04-26 For KT0646M_VX -// V0.2 2016-06-01 VXVX2ıѡ +// V0.2 2016-06-01 增加VX和VX2的编译选项 // V0.3 2016-08-18 For KT0646M_VX4 -// V0.3.1 2016-08-24 ɾKT_WirelessMicTx_InitһЩظ -// V0.4 2016-08-26 XTAL_DUAL -// V0.5 2016-10-11 ޸˳ʼеһЩã0x25,0x26Ĵüӵ˳ʼ棬 -// ڳʼset pilot frequency -// V0.5.1 2016-10-17 ޸һĺ궨壬RXISKT0616MBPSKľģʽȻٸ -// Ƿ˫KT0616Mѡijӽȥ -// V0.5.2 2016-11-15 tunęǰlo_fine_vref_selΪ3tuneij0. -// V0.5.3 2016-12-15 ڳʼаlo_fine_vref_selΪ3tunęʱ޸.Ϊ¶ -// 仯⣬DOUBLE_KVCOΧĴ -// V0.6 2017-02-08 ʽ淶 -// V1.1 2017-04-27 ɾһЩʼûõĶЩСдĸĺ궨ij˴дĸ -// V1.2 2017-05-24 HARD_LIMIT14ij15COMPANDOR_TCij348ms -// V1.3 2017-09-18 COMPEN_GAIN3ij1,MIC_SENS_GAIN9ij5,COMPANDOR_TC_48msijCOMPANDOR_TC_12ms -// V1.4 2017-10-10 echoرյʱ򣬲echoǰEcho_Ratioд0,soft_rstڼĴ0x3ebit15ˣ0x1ebit4. -// V1.5 2017-12-14 ݽKT0616MʱBPSK_NEW_MODEij0Ϊ1 +// V0.3.1 2016-08-24 删除KT_WirelessMicTx_Init程序内一些重复配置 +// V0.4 2016-08-26 修正了XTAL_DUAL问题 +// V0.5 2016-10-11 修改了初始化函数中的一些配置,把0x25,0x26寄存器的配置加到了初始化函数里面, +// 在初始化函数里面set pilot frequency +// V0.5.1 2016-10-17 重新修改了一下里面的宏定义,定义了RXISKT0616M就用BPSK的旧模式,然后再根据 +// 是否是双晶振把KT0616M选晶振的程序加进去。 +// V0.5.2 2016-11-15 在tune台前把lo_fine_vref_sel改为3,tune完后改成0. +// V0.5.3 2016-12-15 在初始化中把lo_fine_vref_sel改为3,不用在tune台的时候再来回修改了.为了温度 +// 变化不锁定的问题,详见被宏DOUBLE_KVCO包围的代码 +// V0.6 2017-02-08 格式规范化整理 +// V1.1 2017-04-27 删除了一些初始化函数里面没用的东西,把有些用小写字母定义的宏定义改成了大写的字母 +// V1.2 2017-05-24 HARD_LIMIT从14改成了15,COMPANDOR_TC改成了3,即48ms。 +// V1.3 2017-09-18 COMPEN_GAIN由3改成1,MIC_SENS_GAIN由9改成5,COMPANDOR_TC_48ms改成COMPANDOR_TC_12ms +// V1.4 2017-10-10 echo关闭的时候,不真正关echo而是把Echo_Ratio写成0,soft_rst不是在寄存器0x3e的bit15了,而是在0x1e的bit4. +// V1.5 2017-12-14 根据接收是KT0616M时,把BPSK_NEW_MODE改成0,否则为1 +// V1.6 2018-12-11 在tune完台通过操作bpsk_dat_en(先写0再写1),可以使RX正常接收到数据,redmine 11433 +// 压扩功能开启或关闭封成了一个函数,KT_WirelessMicTx_COMPANDOR_Dis(BOOL COMP_Dis),传入的参数为1则关闭,否则开启 //***************************************************************************** //----------------------------------------------------------------------------- @@ -31,7 +33,7 @@ #include "interface.h" //----------------------------------------------------------------------------- -//ܼ +//功能及参数定义 //----------------------------------------------------------------------------- #define KT0646M @@ -53,8 +55,8 @@ #endif #endif -#define KT_RX //ʹKTоƬĽջ -//#define OTHER_RX //ʹĽջ +#define KT_RX //使用KT芯片的接收机 +//#define OTHER_RX //使用其他方案的接收机 #define KTWirelessMicTxw_address 0x6A #define KTWirelessMicTxr_address 0x6B @@ -94,22 +96,22 @@ #define PRE_EMPHASIS_ENABLE 0 #define PRE_EMPHASIS_DISABLE 1 -#define MIC_SENS_GAIN_0 0 -#define MIC_SENS_GAIN_1 1 -#define MIC_SENS_GAIN_2 2 -#define MIC_SENS_GAIN_3 3 -#define MIC_SENS_GAIN_4 4 -#define MIC_SENS_GAIN_5 5 -#define MIC_SENS_GAIN_6 6 -#define MIC_SENS_GAIN_7 7 -#define MIC_SENS_GAIN_8 8 -#define MIC_SENS_GAIN_9 9 -#define MIC_SENS_GAIN_10 10 -#define MIC_SENS_GAIN_11 11 -#define MIC_SENS_GAIN_12 12 -#define MIC_SENS_GAIN_13 13 -#define MIC_SENS_GAIN_14 14 -#define MIC_SENS_GAIN_15 15 +#define MIC_SENS_GAIN_0 0 //20K +#define MIC_SENS_GAIN_1 1 //25K +#define MIC_SENS_GAIN_2 2 //30K +#define MIC_SENS_GAIN_3 3 //35K +#define MIC_SENS_GAIN_4 4 //40K +#define MIC_SENS_GAIN_5 5 //50K +#define MIC_SENS_GAIN_6 6 //60K +#define MIC_SENS_GAIN_7 7 //70K +#define MIC_SENS_GAIN_8 8 //80K +#define MIC_SENS_GAIN_9 9 //100K +#define MIC_SENS_GAIN_10 10 //120K +#define MIC_SENS_GAIN_11 11 //140K +#define MIC_SENS_GAIN_12 12 //160K +#define MIC_SENS_GAIN_13 13 //200K +#define MIC_SENS_GAIN_14 14 //240K +#define MIC_SENS_GAIN_15 15 //280K #define COMPANDOR_ENABLE 0 #define COMPANDOR_DISABLE 1 @@ -132,12 +134,12 @@ #define SILENCE_MUTE_ACT_MCU 0 #endif -#ifdef KT_RX //ʹKTоƬĽջ +#ifdef KT_RX //使用KT芯片的接收机 #define PILOT_ENABLE 1 #define PILOT_DISABLE 0 #endif -#ifdef OTHER_RX //ʹĽջ +#ifdef OTHER_RX //使用其他方案的接收机 #define PILOT_ENABLE 0 #define PILOT_DISABLE 1 #endif @@ -149,25 +151,25 @@ #define BATTERY_METER_DISABLE 0 #define BATTERY_METER_ENABLE 1 //ZDF -#define AGC_VHIGH 3 //AGCޣ0-15ѡ -#define AGC_VLOW 4 //AGCޣ0-15ѡ -#define AGC_ATTACK 3 //AGC ATTACKʱ䣺0-7ѡ -#define AGC_RELEASE 4 //AGC RELEASEʱ䣺0-7ѡ -#define AGC_DIS 1//0 //AGCƣ0-Զƣ1-MCU - -#define GAIN_SEL 1 //PGA棺0:-6dB,1:0dB,2:6dB,3:12dB -#define COMPEN_GAIN 1//3 //棺0-0dB,1-6dB,2-12dB,3-18dB -#define BLANK_EN 1 //BLANKƣ0-DIS1-EN -#define BLANK_TIME 3 //BLANKʱ䣺0-7ѡ - -#define ECHO_MCU 1 //ECHOƣ0-ťƣ1-MCU +#define AGC_VHIGH 3 //AGC上门限:0-15可选 +#define AGC_VLOW 4 //AGC下门限:0-15可选 +#define AGC_ATTACK 3 //AGC ATTACK时间:0-7可选 +#define AGC_RELEASE 4 //AGC RELEASE时间:0-7可选 +#define AGC_DIS 1//0 //AGC控制:0-自动控制;1-MCU控制 + +#define GAIN_SEL 1 //PGA增益:0:(-6dB),1:0dB,2:6dB,3:12dB +#define COMPEN_GAIN 1//3 //总体增益:0:0dB,1:6dB,2:12dB,3:18dB +#define BLANK_EN 1 //BLANK控制:0-DIS;1-EN +#define BLANK_TIME 3 //BLANK时间:0-7可选 + +#define ECHO_MCU 1 //ECHO控制:0-旋钮控制;1-MCU控制 #define ECHO_ENABLE 0 #define ECHO_DISABLE 1 -#define ECHO_STRU 1 //С0-1-С -#define ECHO_GAINUP 7 //źŽţ7-13.1dB -#define ECHO_GAINDOWN 0 //źŽţ0--13dB +#define ECHO_STRU 1 //回声大小:0-回声大;1-回声小 +#define ECHO_GAINUP 7 //输出信号进行缩放:7-13.1dB +#define ECHO_GAINDOWN 0 //输入信号进行缩放:0-(-13dB) -//0-޷25-25/32 +//反馈比例:0-无反馈;25-反馈25/32 #define ECHO_RATIO_0 0 #define ECHO_RATIO_1 1 #define ECHO_RATIO_2 2 @@ -195,7 +197,7 @@ #define ECHO_RATIO_24 24 #define ECHO_RATIO_25 25 -//źʱ0-22ms24-207ms +//信号延时:0-22ms;24-207ms #define ECHO_DELAY_22ms 0 #define ECHO_DELAY_24ms 1 #define ECHO_DELAY_27ms 2 @@ -225,7 +227,7 @@ #define EQ_ENABLE 1 #define EQ_DISABLE 0 -//Ƶ +//均衡器频率 #define EQ_25H 0 #define EQ_40H 1 #define EQ_63H 2 @@ -246,7 +248,7 @@ #define EQ_10K 13 #define EQ_16K 14 -// +//均衡器增益 #define EQ_GAIN_Neg12dB 0 #define EQ_GAIN_Neg11dB 1 #define EQ_GAIN_Neg10dB 2 @@ -273,18 +275,31 @@ #define EQ_GAIN_Pos11dB 23 #define EQ_GAIN_Pos12dB 24 -#define HARD_LIMIT 15 //Ƶƫƣ0-15ѡ -#define CPRS_1XLPF_BP 1 //ѹ˲ƣ0-1-ر -#define CPRS_KNEE_DIS 0 //ƣ0-1-ر -#define CPRS_THRSH 8 //ޣ0-15ѡ 18uV-14mV - -#define ALC_DIS 1//0 //ALCƣ0-1-ر -#define ALC_SOFTKNEE 1 //ALCյͣ0-Ӳյ㣻1-յ -#define ALC_VMAX 68//4 //ALCޣ0-127ѡ -#define ALC_ATTACK 3 //ALC ATTACKʱ䣺0-7ѡ -#define ALC_RELEASE 6 //ALC RELEASEʱ䣺0-11ѡ - -//صѹ +#define HARD_LIMIT 15 //最大频偏限制:0-15可选 +#define CPRS_1XLPF_BP 1 //压缩滤波器控制:0-开启;1-关闭 +#define CPRS_KNEE_DIS 0 //噪声控制:0-开启;1-关闭 +#define CPRS_THRSH 8 //噪声门限:0-15可选 18uV-14mV + +/**************************************************************************** +ALC 设置方法 +1、设置ALC_DIS决定是否开启ALC功能 +2、设置ALC_SOFTKNEE决定使用硬拐点还是软拐点 +3、设置ALC_VMAX的值 + +ALC_VMAX的值需要根据发射和接收的频偏计算出来,计算公式为: +(接收频偏值/发射频偏值/2/0.57)^2*0.57 +例如发射MIC_SENS_GAIN_6,即频偏为60K,接收的ADJUST_GAIN设置为1,即为50K频偏 +则(50/60/2/0.57)^2*0.57=0.3045 +如果选的是硬拐点,这ALC_VMAX的拐点选择小于等于0.3045,查datasheet可得ALC_VMAX应配置为72 +如果选的是软拐点,这ALC_VMAX的拐点选择小于等于0.3045/1.5=0.203,查datasheet可得ALC_VMAX应配置为54 +***************************************************************************/ +#define ALC_DIS 1//0 //ALC控制:0-开启;1-关闭 +#define ALC_SOFTKNEE 1 //ALC拐点类型:0-硬拐点;1-软拐点 +#define ALC_VMAX 68//4 //ALC门限:0-127可选 +#define ALC_ATTACK 3 //ALC ATTACK时间:0-7可选 +#define ALC_RELEASE 6 //ALC RELEASE时间:0-11可选 + +//电池电压检测 #define BATTERY_MAX 0x7FF #define BATTERY_HIGHTH 0x500 #define BATTERY_MIDDLETH 0x4C0 @@ -351,4 +366,5 @@ void KT_WirelessMicTx_EQGAIN(UINT8 Eq_Freq,UINT8 Eq_Gain); UINT16 KT_WirelessMicTx_BatteryMeter_Read(void); BOOL KT_WirelessMicTx_BatteryMeter_SW(BOOL bBatteryMeter_En); BOOL KT_WirelessMicTx_Mic_Sens(UINT8 cMicSens); +void KT_WirelessMicTx_COMPANDOR_Dis(BOOL COMP_Dis);//COMP_Dis=1 disable COMPANDOR;COMP_En=0 enable COMPANDOR diff --git a/democode/KT0646M_demoboard/h/SH88F4051.h b/democode/KT0646M_demoboard/h/SH88F4051.h index 00b3171..e04816f 100644 --- a/democode/KT0646M_demoboard/h/SH88F4051.h +++ b/democode/KT0646M_demoboard/h/SH88F4051.h @@ -4,7 +4,7 @@ //***************************************************************************** // Revision History // Version Date Description -// V1.0 2016-04-26 ʼ汾 +// V1.0 2016-04-26 初始版本 //***************************************************************************** #ifndef REGSH88F4051_H diff --git a/democode/KT0646M_demoboard/h/interface.h b/democode/KT0646M_demoboard/h/interface.h index a691c2d..2e54fbd 100644 --- a/democode/KT0646M_demoboard/h/interface.h +++ b/democode/KT0646M_demoboard/h/interface.h @@ -4,10 +4,10 @@ //***************************************************************************** // Revision History // Version Date Description -// V1.0 2015-8-27 ʼ汾 -// V1.1 2017-02-08 ʽ淶 -// V0.3 2017-04-27 ӼƵʵʱȰѵƵˣtunęٻָԭƵãmain.c -// ̨һֱͬIJtunęһʱ󲽽410main.c +// V1.0 2015-8-27 初始版本 +// V1.1 2017-02-08 格式规范化整理 +// V0.3 2017-04-27 加减频率的时候,先把导频关了,tune完台后再恢复原来导频的设置(main.c) +// 调台中一直以相同的步进进行tune台,不会调一段时间后步进变成4倍和10倍(main.c) //***************************************************************************** //----------------------------------------------------------------------------- @@ -18,16 +18,16 @@ //#include "IR.h" //----------------------------------------------------------------------------- -// ܼ +// 功能及参数定义 //----------------------------------------------------------------------------- -#define I2C //I2Cܶ +#define I2C //I2C功能定义 #ifdef I2C #define I2C_WORD_MODE #endif -//#define IR //Ƶ -//#define SOUTAI //Զ̨Ƶ +//#define IR //红外对频 +//#define SOUTAI //自动搜台对频 #ifdef IR #define MIC MIC_B @@ -36,12 +36,12 @@ #endif #ifdef SOUTAI - //Զ̨ƵƵʿ޸ģǷȲ̫󣬲ҪRXһ + //自动搜台对频公共频率可修改,但是幅度不能太大,并且需要和RX一致 #define MIC_Frequency 645350 #endif //----------------------------------------------------------------------------- -//Ͷ +//常用数据类型定义 //----------------------------------------------------------------------------- typedef unsigned char UINT8; typedef unsigned int UINT16; @@ -54,16 +54,16 @@ typedef bit BOOL; //----------------------------------------------------------------------------- // Global VARIABLES //----------------------------------------------------------------------------- -static UINT32 xdata Memery_Frequency; //ƵϢ -static UINT32 xdata Load_Frequency; //flash汣ƵϢ +static UINT32 xdata Memery_Frequency; //保存频道信息 +static UINT32 xdata Load_Frequency; //flash里面保存的频率信息 //static UINT8 VOLUME = 6; -static UINT8 Key_UP_flag=0; //ϼӱ־״̬ -static UINT8 Key_DOWN_flag=0; //¼־״̬ -static BOOL Key_RF_POW_flag=1; //лǷȥ־ +static UINT8 Key_UP_flag=0; //按键长按快速往上加标志状态 +static UINT8 Key_DOWN_flag=0; //按键长按快速往下减标志状态 +static BOOL Key_RF_POW_flag=1; //功率切换是否去抖标志 //static BOOL temp_RF_POW_SW=0; //----------------------------------------------------------------------------- -//VOLUME +//定义VOLUME 参数 //----------------------------------------------------------------------------- #define key_Vol 0 #define key_Freq 1 @@ -75,14 +75,14 @@ static BOOL Key_RF_POW_flag=1; // #define VOLUME_TOP 15 //volume=15 #define VOLUME_BOTTOM 0 //volume=0 -#define VBAT_FULL 0x190 //׼ֵЧе -#define VBAT_LOW 0x177 //͵ѹֵЧе +#define VBAT_FULL 0x190 //充满电标准值,具体效果可自行调节 +#define VBAT_LOW 0x177 //低电压报警值,具体效果可自行调节 #define LED_ON 0 #define LED_OFF 1 //----------------------------------------------------------------------------- -//LCD & KEY +//定义LCD & KEY参数 //----------------------------------------------------------------------------- #define RD_MODE 0xC0 // 110 Binary #define WR_MODE 0xA0 // 101 @@ -198,42 +198,42 @@ static BOOL Key_RF_POW_flag=1; // #define LCD_BATZ ((30<<4) | 0x01) //----------------------------------------------------------------------------- -//EEPROMֺ궨 +//EEPROM操作部分宏定义 //----------------------------------------------------------------------------- -#define EEPROM_UNLOCK_KEY1 0x56 //һԿ -#define EEPROM_UNLOCK_KEY2 0xAE //ڶԿ +#define EEPROM_UNLOCK_KEY1 0x56 //第一个密钥 +#define EEPROM_UNLOCK_KEY2 0xAE //第二个密钥 //----------------------------------------------------------------------------- -//ػŶ +//关机控制引脚定义 //----------------------------------------------------------------------------- -sbit LDO_CTRL = P1^7; // ƿػPOP -sbit VBAT_IN = P1^6; // ƿػPOP +sbit LDO_CTRL = P1^7; // 控制开关机POP声 +sbit VBAT_IN = P1^6; // 控制开关机POP声 //----------------------------------------------------------------------------- -//I2CŶ +//I2C引脚定义 //----------------------------------------------------------------------------- sbit SDA = P3^0; sbit SCL = P3^1; //----------------------------------------------------------------------------- -//KEYŶ +//KEY引脚定义 //----------------------------------------------------------------------------- -sbit RF_POW_SW = P4^0; // ƵС +sbit RF_POW_SW = P4^0; // 射频大小控制 sbit IR_SEND = P1^3; sbit powerOn = P3^5; sbit porN = P3^4; //----------------------------------------------------------------------------- -//LCDŶ +//LCD引脚定义 //----------------------------------------------------------------------------- -sbit LCD_LED = P1^1; // LCD -sbit LCD_WR = P1^0; // LCD -sbit LCD_DATA = P3^7; // LCD -sbit LCD_CS = P4^1; // LCD Ƭѡ +sbit LCD_LED = P1^1; // LCD 背光 +sbit LCD_WR = P1^0; // LCD 控制 +sbit LCD_DATA = P3^7; // LCD 数据 +sbit LCD_CS = P4^1; // LCD 片选 -sbit Key_UP = P4^2; // ƵϿ -sbit Key_DOWN = P3^2; // Ƶ¿ -sbit Key_SET = P3^3; // Ƶ趨 +sbit Key_UP = P4^2; // 频率向上控制 +sbit Key_DOWN = P3^2; // 频率向下控制 +sbit Key_SET = P3^3; // 频率设定 //----------------------------------------------------------------------------- // SYS Function PROTOTYPES @@ -247,12 +247,12 @@ void Save_Freq (void); void Load_Freq (void); void KT_MicTX_Batter_Detecter (void); void KT_MicTX_RFSwitch (void); -void KT_MicTX_Next_Fre (void); // KT_MicTX100KHz -void KT_MicTX_Previous_Fre (void); // KT_MicTX100KHz -void KT_MicTX_Mute (void); // KT_MicTX +void KT_MicTX_Next_Fre (void); // KT_MicTX加100KHz +void KT_MicTX_Previous_Fre (void); // KT_MicTX减100KHz +void KT_MicTX_Mute (void); // KT_MicTX静音 void ex2Init(void); void timer0Init(void); -void KT_MicTX_Init (void); // KT_MicTXʼ +void KT_MicTX_Init (void); // KT_MicTX初始化 void KEY_UP (void); void KEY_DOWN (void); void KEY_DIS (void); @@ -267,7 +267,7 @@ UINT8 Key_Scan (void); void LCD_Init(void); void Scan_segs(UINT8 dByte, UINT16 Tscan); void SendBit_1621(UINT8 cSenddata, UINT8 cCounter); -void SendComBit_1621(UINT8 cSenddata); //dataĵλдHT1621λǰ +void SendComBit_1621(UINT8 cSenddata); //data的低位先写入HT1621,低位在前 void WriteFix_1621(UINT16 iSenddata); void Write_1621(UINT8 cAddr,UINT8 cCom); void Display_Freq_Num(UINT8 cAddress,UINT8 cNum); diff --git a/democode/KT0656M_demoboard/KT_WirelessMicRxdrv.c b/democode/KT0656M_demoboard/KT_WirelessMicRxdrv.c index 9fc8f19..ac1d7c4 100644 --- a/democode/KT0656M_demoboard/KT_WirelessMicRxdrv.c +++ b/democode/KT0656M_demoboard/KT_WirelessMicRxdrv.c @@ -24,6 +24,19 @@ // V1.8 2017-08-25 修改了AUTOMUTE_SNR_LOWTH和AUTOMUTE_SNR_HIGHTH的值 // 从原来的0x58和0x60改成了0x78和0x80,增加了搜台功能的宏定义 // echo delay最多配置为23(197ms) +// V1.9 2017-11-21 修改了KT_WirelessMicRx_SAIInit函数 +// V1.10 2017-12-25 在调用KT_WirelessMicRx_SAIInit函数的位置加入 #ifdef I2S_EN +// 配置I2S_Slave之前要先写i2s_slave_rst=1, 否则运行中修改I2S配置可能失败; +// 在AUTOMUTE_EN未定义时,把AutoMute关掉(AutoMute默认是开的); +// I2S配置相关的宏定义加入 "KT_I2S_" 前缀, 防止SLAVE MASTER 之类模糊的宏定义造成冲突. +// V1.11 2018-03-22 根据芯片的版本来决定patch函数的调用与否 +// V1.12 2018-04-08 根据芯片的版本来决定是否在tune台的时候把rfamp_int_en写为0,a版本需要写为0,b版本不能写为0 +// V1.13 2018-05-03 根据芯片的版本来决定是否打开芯片内部的afc控制,a版本不打开内部的afc控制,b版本打开afc控制 +// 在b版本中,把TUNE函数的i2s的初始化部分注释掉了,其实不应该注释。 +// V1.14 2018-06-27 KT_WirelessMicRx_GetFastRSSI读从机的FASTRSSI应该是0x0222寄存器,原来的写成了0x0221寄存器 +// 把linein 输入输出的音量调一致,把KVCO coarse aim设置为120MHz/V,修复快速tune台可能出现的问题,见#12359 +// V1.15 2018-07-16 line_in初始化里面需要打开line in相关的电源,这样以后line in在什么时候打开都行,否则的话需要一上电就把line in使能打开 +// 增加了KT_WirelessMicRx_SetMaxRfGain函数,用来设置最大的RF_Gain. ///**************************************************************************** //----------------------------------------------------------------------------- @@ -48,6 +61,20 @@ extern UINT8 Flag_PKGSYNC[chipNumb]; //包同步状态标识 UINT8 MorSSelect=1;//有天线分集时 1:主 0:从 +//1主1从 +strI2s chipAI2sConfig={KT_I2S_LRCLK96K,KT_I2S_MCLK12P288M,KT_I2S_SLAVE,KT_I2S_STRREO,KT_I2S_LEFT,KT_I2S_I2SMODE,KT_I2S_LENGHT24BIT}; +strI2s chipBI2sConfig={KT_I2S_LRCLK96K,KT_I2S_MCLK12P288M,KT_I2S_MASTER,KT_I2S_STRREO,KT_I2S_RIGHT,KT_I2S_I2SMODE,KT_I2S_LENGHT24BIT}; + +////2从 +//strI2s chipAI2sConfig={KT_I2S_LRCLK96K,KT_I2S_MCLK12P288M,KT_I2S_SLAVE,KT_I2S_STRREO,KT_I2S_RIGHT,KT_I2S_I2SMODE,KT_I2S_LENGHT24BIT}; +//strI2s chipBI2sConfig={KT_I2S_LRCLK96K,KT_I2S_MCLK12P288M,KT_I2S_SLAVE,KT_I2S_STRREO,KT_I2S_LEFT,KT_I2S_I2SMODE,KT_I2S_LENGHT24BIT}; +// +////1主 +//strI2s chipBI2sConfig={KT_I2S_LRCLK96K,KT_I2S_MCLK12P288M,KT_I2S_MASTER,KT_I2S_STRREO,KT_I2S_RIGHT,KT_I2S_I2SMODE,KT_I2S_LENGHT24BIT}; +// +////1从 +//strI2s chipAI2sConfig={KT_I2S_LRCLK96K,KT_I2S_MCLK12P288M,KT_I2S_SLAVE,KT_I2S_STRREO,KT_I2S_LEFT,KT_I2S_I2SMODE,KT_I2S_LENGHT24BIT}; + //----------------------------------------------------------------------------- //函 数 名:KT_Bus_Write //功能描述:总线写程序 @@ -166,6 +193,7 @@ BOOL KT_WirelessMicRx_PreInit(void) //版 本:V0.2 修改auto_mute control中移位的错误 //版 本:V1.4 初始化中增加了修改0x1f和0x0d寄存器的值 //版 本:V1.5 初始化函数中,把comp_tc由原来的1改成了3,把vtr_momitor_en配置为1使能,把ref_vtr_vth_sel配置为1 +//版 本:V1.6 版本判断中把加了b版本的型号 //----------------------------------------------------------------------------- BOOL KT_WirelessMicRx_Init(void) { @@ -177,7 +205,7 @@ BOOL KT_WirelessMicRx_Init(void) // KT_Bus_Write(0x007F,(regx & 0xfe),chipSel); // power_on finish写0,在while(1)中读到power_on finish=1时,说明芯片重启了 regx=KT_Bus_Read(0x010f,chipSel);//FIRMWARE_VERSION - if(regx!=0x10) + if((regx!=0x10)&&(regx!=0x11)) return 0; regx = KT_Bus_Read(0x0108,chipSel); @@ -189,7 +217,7 @@ BOOL KT_WirelessMicRx_Init(void) KT_Bus_Write(0x000d,0xcf,chipSel); //6mA //可通过0x16<5:0>的变化体现,注意:由于由软件完成该过程,改变此值后要重新tune台 - KT_Bus_Write(0x0109,0x10,chipSel); //pll noise增加3db + KT_Bus_Write(0x0109,0x90,chipSel); //pll noise增加3db KVCO coarse aim=120MHz/V // regx = KT_Bus_Read(0x0224,chipSel); // KT_Bus_Write(0x0224,(regx&0x9f)|0x20,chipSel); //audio_gain=1 增加3.5db @@ -241,9 +269,14 @@ BOOL KT_WirelessMicRx_Init(void) } } #endif + regx = KT_Bus_Read(0x0225,chipSel); //DC_NOTCH_MUTE_EN=1 + KT_Bus_Write(0x0225,regx&0xf1,chipSel); // regx=KT_Bus_Read(0x0053,chipSel); // KT_Bus_Write(0x0053,regx|0x10,chipSel); //BPSK_PKG_SYN_INT_EN=1 +#else + regx = KT_Bus_Read(0x0225,chipSel); //DC_NOTCH_MUTE_EN=0 + KT_Bus_Write(0x0225,regx&0xf0,chipSel); #endif #ifdef SQUEAL_EN @@ -267,13 +300,16 @@ BOOL KT_WirelessMicRx_Init(void) regx = KT_Bus_Read(0x0200,chipSel); KT_Bus_Write(0x0200,(regx&0x8f)|(ADJUST_GAIN<<4),chipSel); //adjust gain =50kHz - - regx = KT_Bus_Read(0x0225,chipSel); //DC_NOTCH_MUTE_EN=1 - KT_Bus_Write(0x0225,regx&0xf1,chipSel); -// KT_Bus_Write(0x0225,regx&0xf0,chipSel); - + regx = KT_Bus_Read(0x010e,chipSel); //AFC CTRL FSM使能控制位disable - KT_Bus_Write(0x010e,regx&0xfe,chipSel); + if(KT_Bus_Read(0x010f,chipSel)==0x10)//a + { + KT_Bus_Write(0x010e,regx&0xfe,chipSel); + } + else//b版本 + { + KT_Bus_Write(0x010e,regx|0x01,chipSel); + } regx=KT_Bus_Read(0x0087,chipSel); //SOFT_AFC_MUTE写为0 KT_Bus_Write(0x0087,regx&~0x08,chipSel); @@ -281,8 +317,8 @@ BOOL KT_WirelessMicRx_Init(void) regx = KT_Bus_Read(0x0217,chipSel); // KT_Bus_Write(0x0217,(regx&0x3f)|(AFC_RNG<<6)|0x01,chipSel); // +/-60kHz; - KT_Bus_Write(0x0218,0x02,chipSel); //afc_en=1 AFC_FROZEN=0 -// KT_Bus_Write(0x0218,0x00,chipSel); //afc_en=0 + KT_Bus_Write(0x0218,0x02,chipSel); //afc_en=1 AFC_FROZEN=0 +// KT_Bus_Write(0x0218,0x00,chipSel); //afc_en=0 regx = KT_Bus_Read(0x0256,chipSel); //comp_tc=1 KT_Bus_Write(0x0256,(regx&0x8f)|0x10,chipSel); @@ -336,11 +372,26 @@ BOOL KT_WirelessMicRx_Init(void) break; } #ifdef KT0655M + regx=KT_Bus_Read(0x003a,chipSel); + KT_Bus_Write(0x003a,(regx & 0x1f),chipSel); //line in 相关电源打开 + Delay_ms(10); + regx=KT_Bus_Read(0x003c,chipSel); + KT_Bus_Write(0x003c,(regx & 0x7f),chipSel); //au_dig_rst=0 + Delay_ms(15); + regx=KT_Bus_Read(0x0330,chipSel); + KT_Bus_Write(0x0330,(regx | 0x3f),chipSel); //line_in en=1 + + regx=KT_Bus_Read(0x0234,chipSel); + KT_Bus_Write(0x0234,(regx | 0x04),chipSel);// 打开有线输入信号 + regx=KT_Bus_Read(0x0331,chipSel); KT_Bus_Write(0x0331,(regx & 0xfe)|LINEIN_AGC_DIS,chipSel);//LINEIN_AGC_DIS regx=KT_Bus_Read(0x0333,chipSel); KT_Bus_Write(0x0333,(regx & ~0x30)|(COMPEN_GAIN<<4),chipSel);//COMPEN_GAIN + + regx=KT_Bus_Read(0x0330,chipSel); + KT_Bus_Write(0x0330,(regx & 0xc1)|(LINEIN_LOCAL_VOL_CTRL<<1),chipSel);//COMPEN_GAIN regx=KT_Bus_Read(0x0334,chipSel); KT_Bus_Write(0x0334,(regx & ~0x18)|(PGA_GAIN_SEL<<3),chipSel);//PGA_GAIN_SEL @@ -355,7 +406,18 @@ BOOL KT_WirelessMicRx_Init(void) regx=KT_Bus_Read(0x033a,chipSel); KT_Bus_Write(0x033a,(regx & ~0x08)|(ALC_SOFTKNEE<<3),chipSel);//ALC_SOFTKNEE #endif - + + regx = KT_Bus_Read(0x0108,chipSel); + KT_Bus_Write(0x0108,(regx|0x10),chipSel); //LOBAND_CALI_SCAN_EN=1 for fasttune + while(1) + { + Delay_ms(10); + if(0==(0x10&KT_Bus_Read(0x0108,chipSel))) + break; + } + + KT_Bus_Write(0x010b,0x60,chipSel); + return(1); } @@ -391,7 +453,8 @@ BOOL KT_WirelessMicRx_Volume(UINT8 cVolume) //修 改 者: 时间: //版 本:V0.1 For KT0656M //版 本:V1.6 增加了根据KT0616M选晶体的程序 -//版 本:V1.7 在切换晶振之前,先把PLL失锁中断关闭,tune台后再打开 +//版 本:V1.7 在切换晶振之前,先把PLL失锁中断关闭,tune台后再打开 +//版 本:V1.12 如果是a版本,则在tune台前把rfamp_int_en=0,如果是b版本则不能写成0 //----------------------------------------------------------------------------- void KT_WirelessMicRx_Tune(long Freq) { @@ -427,8 +490,11 @@ void KT_WirelessMicRx_Tune(long Freq) regx=KT_Bus_Read(0x0047,chipSel); KT_Bus_Write(0x0047,(regx & 0x0F) | Freq_L ,chipSel); - regx=KT_Bus_Read(0x0053,chipSel); - KT_Bus_Write(0x0053,regx&~0x40,chipSel); //rfamp_int_en=0 + if(KT_Bus_Read(0x010f,chipSel)==0x10)//a + { + regx=KT_Bus_Read(0x0053,chipSel); + KT_Bus_Write(0x0053,regx&~0x40,chipSel); //rfamp_int_en=0 + } regx=KT_Bus_Read(0x0047,chipSel); KT_Bus_Write(0x0047,regx | BIT0,chipSel); //chan_valid=1; @@ -438,54 +504,67 @@ void KT_WirelessMicRx_Tune(long Freq) Delay_ms(1); while (!(KT_Bus_Read(0x0061,chipSel) & 0x01)); //PLL done - regx=KT_Bus_Read(0x0042,chipSel); - KT_Bus_Write(0x0042,regx | BIT2,chipSel);//S_DSP_RST - - regx=KT_Bus_Read(0x0042,chipSel); - KT_Bus_Write(0x0042,regx | BIT4,chipSel);//S_PLL_SDM_RST - - regx=KT_Bus_Read(0x0030,chipSel); - LO_LOCK_DET_PD_SAVE = regx&0x80; - KT_Bus_Write(0x0030,regx | BIT7,chipSel);//LO_LOCK_DET_PD=1 - - regx=KT_Bus_Read(0x0017,chipSel); //double+16MHz/V locoarse_var_sel - state=regx&0x07; - if(state >= 3) - { - state = 7; - } - else - { - state = (state<<1) + 3; - } - regx=(regx&0xf8)|state; - KT_Bus_Write(0x0017, regx,chipSel); //write locoarse/lofine_var_sel - - Pll_Band_Cali(0, 255); + if(KT_Bus_Read(0x010f,chipSel)==0x10)//a + { + regx=KT_Bus_Read(0x0042,chipSel); + KT_Bus_Write(0x0042,regx | BIT2,chipSel);//S_DSP_RST + + regx=KT_Bus_Read(0x0042,chipSel); + KT_Bus_Write(0x0042,regx | BIT4,chipSel);//S_PLL_SDM_RST + + regx=KT_Bus_Read(0x0030,chipSel); + LO_LOCK_DET_PD_SAVE = regx&0x80; + KT_Bus_Write(0x0030,regx | BIT7,chipSel);//LO_LOCK_DET_PD=1 + + regx=KT_Bus_Read(0x0017,chipSel); //double+16MHz/V locoarse_var_sel + state=regx&0x07; + if(state >= 3) + { + state = 7; + } + else + { + state = (state<<1) + 3; + } + regx=(regx&0xf8)|state; + KT_Bus_Write(0x0017, regx,chipSel); //write locoarse/lofine_var_sel - PLL_Reset(); + Pll_Band_Cali(0, 255); - regx=KT_Bus_Read(0x0042,chipSel); - KT_Bus_Write(0x0042,regx & ~BIT4,chipSel);//C_PLL_SDM_RST + PLL_Reset(); - regx=KT_Bus_Read(0x0042,chipSel); - KT_Bus_Write(0x0042,regx & ~BIT2,chipSel);//C_DSP_RST + regx=KT_Bus_Read(0x0042,chipSel); + KT_Bus_Write(0x0042,regx & ~BIT4,chipSel);//C_PLL_SDM_RST - Delay_ms(10); + regx=KT_Bus_Read(0x0042,chipSel); + KT_Bus_Write(0x0042,regx & ~BIT2,chipSel);//C_DSP_RST - regx=KT_Bus_Read(0x0030,chipSel); - KT_Bus_Write(0x0030,(regx & ~BIT7)|LO_LOCK_DET_PD_SAVE,chipSel);//LO_LOCK_DET_PD recovery + Delay_ms(10); -// regx = KT_Bus_Read(0x0133,chipSel); -// KT_Bus_Write(0x0133,(regx|0x60),chipSel); // dll_rst_en=1 I_PLL_UNLOCK_EN=1 + regx=KT_Bus_Read(0x0030,chipSel); + KT_Bus_Write(0x0030,(regx & ~BIT7)|LO_LOCK_DET_PD_SAVE,chipSel);//LO_LOCK_DET_PD recovery - KT_WirelessMicRx_SAIInit(); + // regx = KT_Bus_Read(0x0133,chipSel); + // KT_Bus_Write(0x0133,(regx|0x60),chipSel); // dll_rst_en=1 I_PLL_UNLOCK_EN=1 - if(KT_WirelessMicRx_GetSNR()>AUTOMUTE_SNR_LOWTH) - { - regx=KT_Bus_Read(0x0087,chipSel); //SOFT_SNR_MUTE写为0 - KT_Bus_Write(0x0087,regx&~0x02,chipSel); + if(KT_WirelessMicRx_GetSNR()>AUTOMUTE_SNR_LOWTH) + { + regx=KT_Bus_Read(0x0087,chipSel); //SOFT_SNR_MUTE写为0 + KT_Bus_Write(0x0087,regx&~0x02,chipSel); + } } + #ifdef I2S_EN + if(chipSelAUTOMUTE_SNR_LOWTH) { regx=KT_Bus_Read(0x0087,chipSel); //SOFT_SNR_MUTE写为0 @@ -760,7 +852,7 @@ UINT8 KT_WirelessMicRx_GetFastRSSI(void) } else { - cRssi = KT_Bus_Read(0x0221,chipSel); + cRssi = KT_Bus_Read(0x0222,chipSel); } return( cRssi ); } @@ -1133,15 +1225,18 @@ void rfIntCtl(void) UINT8 regx; for(chipSel=0;chipSel3) + sel=3; + regx=KT_Bus_Read(0x0102,chipSel); + regx&=0xfc; + regx|=sel; + KT_Bus_Write(0x0102,regx,chipSel); + regx=KT_Bus_Read(0x005b,chipSel); + rfGain=regx&0x7f; + if(rfGain>((sel<<2)+42)) + { + rfGain=(sel<<2)+42; + KT_Bus_Write(0x005b,(regx&0x80)|rfGain,chipSel); + } } } @@ -1191,18 +1322,21 @@ static void snrMuteRefresh(void) UINT8 regx; for(chipSel=0;chipSel=AUTOMUTE_SNR_HIGHTH)||((KT_Bus_Read(0x0100,chipSel)&0x20)==0x00)) - { - regx=KT_Bus_Read(0x0087,chipSel); - KT_Bus_Write(0x0087,(regx&~0x02),chipSel); - } - else + if(KT_Bus_Read(0x010f,chipSel)==0x10) { + if(((KT_Bus_Read(0x0100,chipSel)&0x20)==0x20)&&(KT_Bus_Read(0x020D,chipSel)<=AUTOMUTE_SNR_LOWTH)) + { + regx=KT_Bus_Read(0x0087,chipSel); + KT_Bus_Write(0x0087,(regx|0x02),chipSel); + } + else if((KT_Bus_Read(0x020D,chipSel)>=AUTOMUTE_SNR_HIGHTH)||((KT_Bus_Read(0x0100,chipSel)&0x20)==0x00)) + { + regx=KT_Bus_Read(0x0087,chipSel); + KT_Bus_Write(0x0087,(regx&~0x02),chipSel); + } + else + { + } } } } @@ -1228,8 +1362,11 @@ void KT_WirelessMicRx_Patch(void) void Seek_Freq_FastTune(long Freq) { UINT8 Freq_H,Freq_M,Freq_L,regx; - regx=KT_Bus_Read(0x0053,chipSel); - KT_Bus_Write(0x0053,regx&~0x40,chipSel); //rfamp_int_en=0 + if(KT_Bus_Read(0x010f,chipSel)==0x10)//a + { + regx=KT_Bus_Read(0x0053,chipSel); + KT_Bus_Write(0x0053,regx&~0x40,chipSel); //rfamp_int_en=0 + } #ifdef XTAL_DUAL #ifdef NEW_SEL_XTAL_MODE caclXtal(Freq);//select xtal @@ -1528,19 +1665,38 @@ static void oldCaclXtal(INT32 Freq) //返 回:无 //设 计 者:Zhou Dongfeng 时间:2016-07-13 //修 改 者: 时间: -//版 本:V0.1 For KT0656M +//版 本:V0.1 For KT0656M +//版 本:V1.9 修改了KT_WirelessMicRx_SAIInit初始化函数 //----------------------------------------------------------------------------- -void KT_WirelessMicRx_SAIInit(void) +void KT_WirelessMicRx_SAIInit(pStrI2s i2sConfigTemp) { UINT8 regx; -#ifdef DIVERSITY - if(chipSel>chipAS) //B通道 -#else - if(chipSel>chipAM) //B通道 -#endif + KT_Bus_Write(0x0052,0x04,chipSel); + if(i2sConfigTemp->masterOrSlave==1) //mater { - KT_Bus_Write(0x0050, 0x20,chipSel); //stereo_mono_sel=1 LR_SEL=0 //1 left 0 right - KT_Bus_Write(0x0051, 0x10,chipSel); //默认情况下,mclk=12m,mclk/lrclk=128,i2s标准,对应dac double模式 + regx = KT_Bus_Read(0x0050,chipSel); + KT_Bus_Write(0x0050,(regx&0xc0)|((i2sConfigTemp->stereoOrMono)<<5)| + ((i2sConfigTemp->leftOrRight)<<4)|((i2sConfigTemp->mode)<<2)|(i2sConfigTemp->dataLength),chipSel); + regx = KT_Bus_Read(0x0051,chipSel); + if((i2sConfigTemp->LRCLK)== KT_I2S_LRCLK48K) + { + KT_Bus_Write(0x0051, (regx&0xf0)|(i2sConfigTemp->mode)|0x18,chipSel); + } + else if((i2sConfigTemp->LRCLK)==KT_I2S_LRCLK192K) + { + KT_Bus_Write(0x0051, (regx&0xf0)|(i2sConfigTemp->mode)|0x14,chipSel); + } + else //96K + { + if((i2sConfigTemp->MCLK)==KT_I2S_MCLK24P576M) + { + KT_Bus_Write(0x0051, (regx&0xf0)|(i2sConfigTemp->mode)|0x1c,chipSel); + } + else + { + KT_Bus_Write(0x0051, (regx&0xf0)|(i2sConfigTemp->mode)|0x10,chipSel); + } + } KT_Bus_Write(0x0052, 0x02,chipSel); //i2s_master_en= 1 } else @@ -1549,13 +1705,42 @@ void KT_WirelessMicRx_SAIInit(void) KT_Bus_Write(0x004d,0x01,chipSel); //自动估算,快速模式,phase=0,unlock_tw=0 regx = KT_Bus_Read(0x004d,chipSel); KT_Bus_Write(0x004d,regx|0x80,chipSel); //unlock_tw_cfg_rdy = 1 - KT_Bus_Write(0x0050,0x36,chipSel); //立体声,左声道,i2s标准以及24bit data + regx = KT_Bus_Read(0x0050,chipSel); + KT_Bus_Write(0x0050,(regx&0xc0)|((i2sConfigTemp->stereoOrMono)<<5)| + ((i2sConfigTemp->leftOrRight)<<4)|((i2sConfigTemp->mode)<<2)|(i2sConfigTemp->dataLength),chipSel); regx = KT_Bus_Read(0x0050,chipSel); KT_Bus_Write(0x0050,regx|0x40,chipSel); //i2s_slave_sync_en=1 regx = KT_Bus_Read(0x0052,chipSel); KT_Bus_Write(0x0052,regx|0x08,chipSel); //i2ss_pad_sdout_oen=1 } } + +//void KT_WirelessMicRx_SAIInit(void) +//{ +// UINT8 regx; +//#ifdef DIVERSITY +// if(chipSel>chipAS) //B通道 +//#else +// if(chipSel>chipAM) //B通道 +//#endif +// { +// KT_Bus_Write(0x0050, 0x20,chipSel); //stereo_mono_sel=1 LR_SEL=0 //1 left 0 right +// KT_Bus_Write(0x0051, 0x10,chipSel); //默认情况下,mclk=12m,mclk/lrclk=128,i2s标准,对应dac double模式 +// KT_Bus_Write(0x0052, 0x02,chipSel); //i2s_master_en= 1 +// } +// else +// { +// KT_Bus_Write(0x0052,0x01,chipSel); //i2s_slave_en = 1 +// KT_Bus_Write(0x004d,0x01,chipSel); //自动估算,快速模式,phase=0,unlock_tw=0 +// regx = KT_Bus_Read(0x004d,chipSel); +// KT_Bus_Write(0x004d,regx|0x80,chipSel); //unlock_tw_cfg_rdy = 1 +// KT_Bus_Write(0x0050,0x36,chipSel); //立体声,左声道,i2s标准以及24bit data +// regx = KT_Bus_Read(0x0050,chipSel); +// KT_Bus_Write(0x0050,regx|0x40,chipSel); //i2s_slave_sync_en=1 +// regx = KT_Bus_Read(0x0052,chipSel); +// KT_Bus_Write(0x0052,regx|0x08,chipSel); //i2ss_pad_sdout_oen=1 +// } +//} #endif //I2S 主左从右 主有从无 diff --git a/democode/KT0656M_demoboard/KT_WirelessMicRxdrv.h b/democode/KT0656M_demoboard/KT_WirelessMicRxdrv.h index 623cc56..321d85a 100644 --- a/democode/KT0656M_demoboard/KT_WirelessMicRxdrv.h +++ b/democode/KT0656M_demoboard/KT_WirelessMicRxdrv.h @@ -24,10 +24,24 @@ // V1.8 2017-08-25 修改了AUTOMUTE_SNR_LOWTH和AUTOMUTE_SNR_HIGHTH的值 // 从原来的0x58和0x60改成了0x78和0x80,增加了搜台功能的宏定义 // echo delay最多配置为23(197ms) -// +// V1.9 2017-11-21 修改了KT_WirelessMicRx_SAIInit函数 +// V1.10 2017-12-25 在调用KT_WirelessMicRx_SAIInit函数的位置加入 #ifdef I2S_EN +// 配置I2S_Slave之前要先写i2s_slave_rst=1, 否则运行中修改I2S配置可能失败; +// 在AUTOMUTE_EN未定义时,把AutoMute关掉(AutoMute默认是开的); +// I2S配置相关的宏定义加入 "KT_I2S_" 前缀, 防止"LEFT" "RIGHT"之类模糊的宏定义造成冲突. +// V1.11 2018-03-22 根据芯片的版本来决定patch函数的调用与否 +// V1.12 2018-04-08 根据芯片的版本来决定是否在tune台的时候把rfamp_int_en写为0,a版本需要写为0,b版本不能写为0 +// V1.13 2018-05-03 根据芯片的版本来决定是否打开芯片内部的afc控制,a版本不打开内部的afc控制,b版本打开afc控制 +// 在b版本中,把TUNE函数的i2s的初始化部分注释掉了,其实不应该注释。 +// V1.14 2018-06-27 KT_WirelessMicRx_GetFastRSSI读从机的FASTRSSI应该是0x0222寄存器,原来的写成了0x0221寄存器 +// 把linein 输入输出的音量调一致,把KVCO coarse aim设置为120MHz/V,修复快速tune台可能出现的问题,见#12359 +// V1.15 2018-07-16 line_in初始化里面需要打开line in相关的电源,这样以后line in在什么时候打开都行,否则的话需要一上电就把line in使能打开 +// 增加了KT_WirelessMicRx_SetMaxRfGain函数,用来设置最大的RF_Gain. //----------------------------------------------------------------------------- // Includes //----------------------------------------------------------------------------- +#ifndef _KT_WirelessMicRxdrv_h_ +#define _KT_WirelessMicRxdrv_h_ #include "interface.h" //----------------------------------------------------------------------------- @@ -102,9 +116,9 @@ //频点范围及步进 #define BAND_TOP_CHA 754850//727550//754850//662500 #define BAND_BOTTOM_CHA 740150//710450//740150 -#define BAND_TOP_CHB 769850//743750//769850 -#define BAND_BOTTOM_CHB 755150//728150//755150 -#define BAND_STEP 300 +#define BAND_TOP_CHB 800000//743750//769850 +#define BAND_BOTTOM_CHB 650000//728150//755150 +#define BAND_STEP 50 //电池电压检测 #define BATTERY_MAX 0x7FF @@ -114,7 +128,8 @@ #ifdef KT0655M #define LINEIN_AGC_DIS 0 //0:使用自动调整增益的功能 1:不使用自动调整功能 - #define COMPEN_GAIN 1 //0:补偿后总增益为0dB 1:补偿后总体增益为6dB 2:补偿后总体增益为12dB 3:补偿后总体增益为18dB + #define LINEIN_LOCAL_VOL_CTRL 30 + #define COMPEN_GAIN 2 //0:补偿后总增益为0dB 1:补偿后总体增益为6dB 2:补偿后总体增益为12dB 3:补偿后总体增益为18dB #define PGA_GAIN_SEL 3 // 2'b00:-6dB 2'b01:0dB 2'b10:6dB 2'b11:12dB #define SLNC_MUTE_TIME 0x13 // #define SLNC_MUTE_DIS 1 //0:使能Silence Mute功能 1:关闭Silence Mute功能。 @@ -237,11 +252,46 @@ typedef struct UINT8 exciterEven; }soundEffect,*pSoundEffect; +#define KT_I2S_LRCLK48K 0 +#define KT_I2S_LRCLK96K 1 +#define KT_I2S_LRCLK192K 2 +#define KT_I2S_MCLK24P576M 1 +#define KT_I2S_MCLK12P288M 0 +#define KT_I2S_MASTER 1 +#define KT_I2S_SLAVE 0 +#define KT_I2S_STRREO 1 +#define KT_I2S_MONO 0 +#define KT_I2S_LEFT 1 +#define KT_I2S_RIGHT 0 +#define KT_I2S_NOMODE 0 +#define KT_I2S_I2SMODE 1 +#define KT_I2S_LEFTMODE 2 +#define KT_I2S_RIGHTMODE 3 +#define KT_I2S_LENGHT16BIT 0 +#define KT_I2S_LENGHT20BIT 1 +#define KT_I2S_LENGHT24BIT 2 +#define KT_I2S_LENGHT8BIT 3 + +typedef struct +{ + UINT8 LRCLK; + UINT8 MCLK; + UINT8 masterOrSlave;//1:master 0:slave + UINT8 stereoOrMono;//1:stereo 0:Mono + UINT8 leftOrRight;//1:left 0:right + UINT8 mode;//0:不能选 1:I2S 2:左对齐 3:右对齐 + UINT8 dataLength;//0:16 1:20 2:24 3:8 +}strI2s,*pStrI2s; + + extern pSoundEffect pChangeSound; extern soundEffect data soundA; +extern strI2s chipAI2sConfig; + #ifdef TWOCHANNEL extern soundEffect data soundB; +extern strI2s chipBI2sConfig; #endif //----------------------------------------------------------------------------- @@ -269,7 +319,7 @@ void KT_WirelessMicRx_CheckAUXCH(void); UINT8 KT_WirelessMicRx_CheckPilot(void); UINT8 KT_WirelessMicRx_GetSNR(void); void KT_WirelessMicRx_SelectMS(void); -void KT_WirelessMicRx_SAIInit(void); +void KT_WirelessMicRx_SAIInit(pStrI2s i2sConfigTemp); void KT_WirelessMicRx_FastTune(long Freq); void KT_WirelessMicRx_Patch(void); UINT16 KT_WirelessMicRx_BatteryMeter_Read(void); @@ -283,3 +333,6 @@ static void pilotMuteRefresh(void); void rfIntCtl(void); static void selXtal(bit xtalSel); static void snrMuteRefresh(void); +void KT_WirelessMicRx_SetMaxRfGain(UINT8 sel);//输入范围0-3 对应36,40,44,48 + +#endif diff --git a/democode/KT0656M_demoboard/Main.c b/democode/KT0656M_demoboard/Main.c index 9982ac6..9feea95 100644 --- a/democode/KT0656M_demoboard/Main.c +++ b/democode/KT0656M_demoboard/Main.c @@ -17,6 +17,8 @@ // 把rfIntCtl();pilotMuteRefresh();snrMuteRefresh();移到了驱动文件(Main.c) // V1.7 2017-06-28 增加了BATTERY_Display函数,用来显示接收机的电池电压(Main.c) // V1.8 2017-09-18 增加了根据搜台功能宏定义开关来决定一些代码 +// V1.9 2017-11-21 由于修改了KT_WirelessMicRx_SAIInit函数,所以i2sInit也修改了 +// V1.10 2018-04-08 rfIntCtlChip, pilotMuteRefreshChip,snrMuteRefreshChip函数运行前判断一下芯片版本 //***************************************************************************** //----------------------------------------------------------------------------- @@ -325,13 +327,23 @@ void burnOtp(void) //设 计 者:KANG Hekai 时间:2012-08-01 //修 改 者: 时间: //版 本:V1.0 +//版 本:V1.9 由于修改了KT_WirelessMicRx_SAIInit函数,所以i2sInit也修改了 //----------------------------------------------------------------------------- void i2sInit(void) { #ifdef I2S_EN for(chipSel=0;chipSel=AUTOMUTE_SNR_HIGHTH)||((KT_Bus_Read(0x0100,chipSel)&0x20)==0x00)) - { - regx=KT_Bus_Read(0x0087,chipSel); - KT_Bus_Write(0x0087,(regx&~0x02),chipSel); - } - else + if(KT_Bus_Read(0x010f,chip)==0x10)//a { + if(((KT_Bus_Read(0x0100,chipSel)&0x20)==0x20)&&(KT_Bus_Read(0x020D,chipSel)<=AUTOMUTE_SNR_LOWTH)) + { + regx=KT_Bus_Read(0x0087,chipSel); + KT_Bus_Write(0x0087,(regx|0x02),chipSel); + } + else if((KT_Bus_Read(0x020D,chipSel)>=AUTOMUTE_SNR_HIGHTH)||((KT_Bus_Read(0x0100,chipSel)&0x20)==0x00)) + { + regx=KT_Bus_Read(0x0087,chipSel); + KT_Bus_Write(0x0087,(regx&~0x02),chipSel); + } + else + { + } } } diff --git a/demohardware/KT0656M_demoboard/KT0656M_Demoboard_Mainboard_V1.1.pdf b/demohardware/KT0656M_demoboard/KT0656M_Demoboard_Mainboard_V1.1.pdf new file mode 100644 index 0000000..e4907e5 Binary files /dev/null and b/demohardware/KT0656M_demoboard/KT0656M_Demoboard_Mainboard_V1.1.pdf differ