- #include "i2c_tts.h"
- #include "delay.h"
- #include <string.h>
- #define I2C_Speed 10000 //快速模式10k
- #define I2C1_TTS_SLAVE_ADDRESS7 0x80 //從機(jī)地址
- //XFS5152CE作為I2C接口的從設(shè)備,設(shè)備地址為: 0x80。
- //為保證通訊的穩(wěn)定性,XFS5152CE的I2C接口通信速度要求不高于15KHZ。
- /**************************************************
- *函數(shù)名稱(chēng):void I2C_TTS_GPIO_Configuration(void)
- *
- *入口參數(shù):無(wú)
- *
- *出口參數(shù):無(wú)
- *
- *功能說(shuō)明:配置使用的I/ O端口引腳
- ***************************************************/
- void I2C_TTS_GPIO_Configuration(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; //配置I2C1 PB6-SCL和PB7-SDA
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //管腳頻率為50MHZ
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; //模式為復(fù)用開(kāi)漏輸出,因此兩個(gè)引腳要接上拉電阻
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- }
- /**************************************************
- *函數(shù)名稱(chēng):void I2C_TTS_Configuration(void)
- *
- *入口參數(shù):無(wú)
- *
- *出口參數(shù):無(wú)
- *
- *功能說(shuō)明:I2C Configuration
- ***************************************************/
- void I2C_TTS_Configuration(void)
- {
- I2C_InitTypeDef I2C_InitStructure;
- //定義I2C初始化結(jié)構(gòu)體I2C_InitStructure
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
- I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; //I2C模式
- I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_16_9;
- //占空比一定要選I2C_DutyCycle_16_9,不能選I2C_DutyCycle_2,因?yàn)門(mén)TS的速率不能超過(guò)15KHZ
- I2C_InitStructure.I2C_OwnAddress1 = I2C1_TTS_SLAVE_ADDRESS7; //TTS地址(0x80)使能應(yīng)答
- I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
- I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; //應(yīng)答7位地址
- I2C_InitStructure.I2C_ClockSpeed = I2C_Speed;
- I2C_Init(I2C1, &I2C_InitStructure); //初始化I2C
- I2C_Cmd(I2C1, ENABLE); //使能I2C1
- }
- /**************************************************
- *函數(shù)名稱(chēng):void I2C_TTS_Init()
- *
- *入口參數(shù):無(wú)
- *
- *出口參數(shù):無(wú)
- *
- *功能說(shuō)明:初始化用于I2C TTS驅(qū)動(dòng)的外設(shè)
- ***************************************************/
- void I2C_TTS_Init()
- {
- I2C_TTS_GPIO_Configuration();
- I2C_TTS_Configuration();
- }
- /**************************************************
- *函數(shù)名稱(chēng):void I2C_TTS_Write(u8 *pBuffer, u8 NumByteToWrite)
- *
- *入口參數(shù):pBuffer指向?qū)懭氲臄?shù)據(jù)緩沖區(qū),NumByteToWrite寫(xiě)入TTS的字節(jié)數(shù)
- *
- *出口參數(shù):無(wú)
- *
- *功能說(shuō)明:寫(xiě)入多個(gè)字節(jié)的TTS。
- ***************************************************/
- void I2C_TTS_Write(u8 *pBuffer, u8 NumByteToWrite)
- {
- I2C_GenerateSTART(I2C1, ENABLE); //起始信號(hào)
- while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); // 測(cè)試和清除EV5
- I2C_Send7bitAddress(I2C1, I2C1_TTS_SLAVE_ADDRESS7, I2C_Direction_Transmitter); //發(fā)送寫(xiě)TTS地址
- while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); // 測(cè)試和清除EV6
- while(NumByteToWrite--)
- {
- I2C_SendData(I2C1, *pBuffer); //發(fā)送當(dāng)前字節(jié)
- pBuffer++; //下一個(gè)被寫(xiě)入的字節(jié)
- while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); // 測(cè)試和清除EV8
- }
- I2C_GenerateSTOP(I2C1, ENABLE); //停止信號(hào)
- }
- /***********************************************************
- * 名 稱(chēng): XFS5051 文本合成語(yǔ)音函數(shù)
- * 功 能: 發(fā)送合成文本到XFS5051芯片進(jìn)行合成播放
- * 入口參數(shù): *pData:文本指針變量
- * 出口參數(shù): 無(wú)
- * 說(shuō) 明: 本函數(shù)用于文本合成語(yǔ)音。
- **********************************************************/
- void TTS_SendFrameInfo(u8 *pData)
- {
- /****************需要發(fā)送的文本**********************************/
- u8 Frame_Info[45];
- u8 dataLength = strlen((const char *)pData); //需要發(fā)送文本的長(zhǎng)度
-
- /*****************幀固定配置信息**************************************/
- Frame_Info[0] = 0xFD ; //構(gòu)造幀頭FD
- Frame_Info[1] = 0x00 ; //構(gòu)造數(shù)據(jù)區(qū)長(zhǎng)度的高字節(jié)
- Frame_Info[2] = dataLength+2; //構(gòu)造數(shù)據(jù)區(qū)長(zhǎng)度的低字節(jié)
- Frame_Info[3] = 0x01 ; //構(gòu)造命令字:合成播放命令
- Frame_Info[4] = 0x01; //文本編碼格式:GBK
-
- /*******************發(fā)送幀信息***************************************/
- memcpy(&Frame_Info[5], pData, dataLength);
- I2C_TTS_Write(Frame_Info,5+dataLength); //發(fā)送幀配置
-
- }
復(fù)制代碼 |