本帖最后由 ALTIUM2 于 2015-9-9 21:09 编辑
每天解决一个问题16:小谈YL-KL26Z中Demo_SD_SPI
很开森,申请的YL-KL26Z成功了,于是抽空偷偷的把YL-KL26Z光盘历程瞅瞅,下面和大家一起看看。
*********************************************************************************************************
void PIT_IRQHandler(void)
{
PIT_TFLG0 |= PIT_TFLG_TIF_MASK; /* ????? */
if(adcGetUint()<AD_Sample_Num/3) //根据adc采样值来设置LED的状态,显示音量档位
{
Led5Set(1);
Led6Set(0);
Led7Set(0);
}
else if(adcGetUint()<2*AD_Sample_Num/3)
{
Led5Set(1);
Led6Set(1);
Led7Set(0);
}
else
{
Led5Set(1);
Led6Set(1);
Led7Set(1);
}
Volume=Volume_Num*adcGetUint()>>16; //计算音量
dacTrigger(Buffer[FIFO_out]/(Volume_Num-Volume));
FIFO_out++; //播放缓冲区指针+1
if(FIFO_out>2047) //′播放缓冲区下标溢出
{
FIFO_out=0; //重置下标
}
}
*********************************************************************************************************
这是Demo中播放SD卡音乐的PIT中断服务程序。
功能分析:
1.利用 PIT 定时器产生16K的定时。
2.在PIT中AD检测电位计的大小,从而判断音量设置大小。
3.根据音量大小设置DA输出的大小,从而控制音量的大小。
4.DA输出的内容是Buffer中的数据,Buffer是从SD卡中读取的。
之我见:
首先我看了这段程序之后,我觉得很欠妥,实时性很不好,所以大家在产品设计中最好不要这么做,Demo就算了。
小问题1:PIT注释
这是wav文件参数,16K的采样速率,8bit数据,所以在播放时要16K速率播放
PIT的时钟频率为24MHZ,当设置24000000时延时为1S,3000为8K,1500为16K,所以应该为16速率。官方标注的是8K,实际应该为16K。
小问题2:音量采集的速率
adcGetUint();是音量调节电位计的AD采用函数
可以看到最恶劣的情况这函数被调用了3次,实际AD采集时间还是很久的,想想是多么浪费。
还有音量调节会有这么快的速度吗?16KHZ,答案是否定的。
我觉得可以用标志位定时采集,这样比较的合理。
|