123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- #include "includes.h"
- void FM_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
- GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); //Disable jtag
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Pin = FM_CLK_PIN;
- GPIO_Init(FM_CLK_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = FM_SDA_PIN;
- GPIO_Init(FM_SDA_PORT, &GPIO_InitStructure);
- }
- ///////////////////////////////////////////////////////
- void FM_Dly(unsigned char timeDly)
- {
- unsigned short i;
- for(i=0;i<timeDly*50;i++)
- {
- __NOP();__NOP();
- }
- }
- void FM_Transmit(unsigned short data)
- {
-
- unsigned char i;
- FM_CLK(0);
- for(i=0;i<10;i++)
- {
- FM_SDA(data & 0x01);
- FM_Dly(4);//2
- FM_CLK(1);
- FM_Dly(4);
- FM_SDA(0);
- FM_Dly(4);
- FM_CLK(0);
- data >>= 1;
- }
- FM_Dly(4);
- FM_SDA(1);
- FM_Dly(4);
- FM_CLK(1);
- FM_Dly(4);
- FM_CLK(0);
- }
- void VolumeSave(void)
- {
- //SPIParaSave();
- }
- //volume: 低七位有效
- void FMSetVolume(unsigned char volume,char needSave)
- {
- unsigned char volTable[]={0,12,14,15,16,17,18,19,20,21};//10
- unsigned char ExvolTable[]={0,5,6,7,8,9,10,12,14,15,16};//4
- static unsigned char lastVolume=0xff;
- unsigned short transmitData,temp;
- unsigned char *p[10]={0};
- char buf[30];
- char i;
-
- sprintf(buf,"Vol:%d", volume);
- if(volume == VOLUME_MAX) strcat(buf, " Max");
- else if(volume == VOLUME_MIN) strcat(buf, " Min");
- //strcat(buf, "\r\n");
- SlwTrace(INF, buf,1);
- //if(lastVolume == volume) return;
- if(Headsetsta) {
- for(i=0;i<sizeof(volTable);i++)p[i]=&ExvolTable[i]; //有耳机
- }else{
- for(i=0;i<sizeof(volTable);i++)p[i]=&volTable[i]; //未插耳机
- }
- #if 1
-
- //0b---0xxc cttt ttkn
- //xx都固定为1
- //cc为通道2增益,这里随便
- //ttttt为通道1增益
- //k控制多少个通道 这里控制1个,即为1
- //n为通道选择 这里只选择通道1 即为0
-
- //printf("*(p[volume-1]==%d\r\n",*(p[volume]));
- transmitData=0x780;//0111 1000 0010 //2 0110 0000 0010
- //temp=volTable[volume-1]<<2;
- temp=(*(p[volume]))<<2;
- temp &= 0x7C;//0111 1100;//只取低5bits
- transmitData |= temp;
- FM_Transmit(transmitData);
- #else
- volume *= 2;
- transmitData =0;
- transmitData |= (1<<9) | (1<<10);//bit 9=1,bit10=1
- temp = volume & 0x7E;
- temp <<= 2;
- transmitData |= temp;
- transmitData |= (1>>7)|(1>>8);
- FM_Transmit(transmitData);
- #endif
- lastVolume = volume;
- if(needSave) VolumeSave();
- }
- void FMVolumeChange(VOLUME_DEF add_dicrease,char needSave)
- {
-
- // switch(add_dicrease)
- // {
- // case VOLUME_NORMAL:
- // sutSpiPara.volume = VOLUEM_DEFAULT;
- // break;
- // case VOLUME_RESTORE:
- // sutSpiPara.volume=sutSpiPara.volume;
- // break;
- // case VOLUME_ADD:
- // if(sutSpiPara.volume < VOLUME_MAX)
- // sutSpiPara.volume++;
- // break;
- // case VOLUME_DECREASE:
- // if(sutSpiPara.volume > VOLUME_MIN)
- // sutSpiPara.volume--;
- // break;
- // }
- // FMSetVolume(sutSpiPara.volume,needSave);
-
- }
- //void SaveCurrentVolume(void)
- //{
- // FMSetVolume(sutSpiPara.volume, 1);
- //}
|