当前位置:首页 > 单片机 > 单片机
[导读]目前能够初始化AC97,能够进入就绪中断,说明能够检测到WM9714,但是无法读取WM9714,不知道哪里出错了,目前正在解决中...AC97.c/***********************************************************************************

目前能够初始化AC97,能够进入就绪中断,说明能够检测到WM9714,但是无法读取WM9714,不知道哪里出错了,目前正在解决中...


AC97.c


/*************************************************************************************************************

*文件名:AC97.c

*功能:S3C6410AC97底层驱动函数

*作者:cp1300@139.com

*创建时间:2012年10月6日20:41

*最后修改时间:2012年10月6日

*详细:AC97控制器底层驱动

*************************************************************************************************************/

#include"system.h"

#include"ac97.h"

#include"delay.h"

//使能AC97-LINK传输数据

#defineAC97_EnTraansferACLink()(AC97->GLBCTRL|=BIT3)

//使能AC97-LINK

#defineAC97_ACLinkOn()(AC97->GLBCTRL|=BIT2)

//AC97中断定义

#defineAC97_ALL_INT(0x7f<<16)//全部中断

#defineCODE_READY_INT(1<<22)//编解码器准备就绪中断

#definePCM_OUT_UNDER_INT(1<<21)//PCM输出通道FIFO空中断

#definePCM_IN_OVER_INT(1<<20)//PCM输入通道FIFO满中断

#defineMIC_IN_OVER_INT(1<<19)//MIC输入通道FIFO满中断

#definePCM_OUT_THRES_INT(1<<18)//PCM输出通道FIFO半满中断

#definePCM_IN_THRES_INT(1<<17)//PCM输入通道FIFO半满中断

#defineMIC_IN_THRES_INT(1<<16)//MIC输入通道FIFO半满中断

//延时控制,单位US

#defineAC97_WARMRESET_DELAY2//系统热复位延时

#defineAC97_COLDRESET_DELAY2//系统冷复位延时

#defineAC97_CMDREAD_DELAY2000//读取延时

#defineAC97_CMDWRITE_DELAY22//写命令延时

/*************************************************************************************************************************

*函数:voidAC97_WarmReset(void)

*功能:AC97控制器热复位

*参数:无

*返回:无

*依赖:底层宏定义

*作者:cp1300@139.com

*时间:20121006

*最后修改时间:20121006

*说明:用于从关闭电源唤醒编解码器

*************************************************************************************************************************/

voidAC97_WarmReset(void)

{

AC97->GLBCTRL&=~(0xf);//清除设置

AC97->GLBCTRL|=BIT1;//开始复位

Delay_US(AC97_WARMRESET_DELAY);//延时,大于1US

AC97->GLBCTRL&=~BIT1;//结束复位

AC97_ACLinkOn();

AC97_EnTraansferACLink();

Delay_US(1);

}

/*************************************************************************************************************************

*函数:voidAC97_ColdReset(void)

*功能:AC97控制器冷复位

*参数:无

*返回:无

*依赖:底层宏定义

*作者:cp1300@139.com

*时间:20121006

*最后修改时间:20121006

*说明:用于复位编解码器和控制器的逻辑,复位时间最小1us

*************************************************************************************************************************/

voidAC97_ColdReset(void)

{

AC97->GLBCTRL|=BIT0;//开始复位

Delay_US(AC97_COLDRESET_DELAY);

AC97->GLBCTRL&=~BIT0;//结束复位

AC97_WarmReset();

Delay_US(1);

}

/*************************************************************************************************************************

*函数:u8AC97_Init(void)

*功能:AC97控制器初始化

*参数:无

*返回:1:初始化失败;0:初始化成功

*依赖:底层宏定义

*作者:cp1300@139.com

*时间:20121006

*最后修改时间:20121006

*说明:无

*************************************************************************************************************************/

u8AC97_Init(void)

{

u16i=0;

//初始化AC97硬件接口

rGPDPUD=0x1<<2;//AC97BITCLKCDCLKPullDownEnable

rGPDCON=0x44444;

Set_GateClk(PCLK_AC97,ENABLE);//使能AC97控制器门控时钟

AC97_ColdReset();//AC97控制器冷复位

AC97_IntClear(CODE_READY_INT);//清除准备就绪中断

AC97_IntEnable(CODE_READY_INT,ENABLE);//使能准备就绪中断

while(!(AC97_GetIntStatus()&CODE_READY_INT))//等待准备就绪中断

{

i++;

if(i>1000)

{

DEBUG("AC97WaintTimeOut!n");

return1;

}

Delay_MS(1);

}

AC97_IntEnable(CODE_READY_INT,DISABLE);//关闭准备就绪中断

AC97_IntClear(CODE_READY_INT);//清除准备就绪中断

Delay_MS(1);

return0;

}

/*************************************************************************************************************************

*函数 : u16 AC97_CodeCMD(AC97_CMD AC97_RW,u8 RegAddr,u1

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

March 16, 2026 ---- 根据TrendForce集邦咨询最新电动车牵引逆变器研究,2025年第四季因纯电动车(BEV)销量较前一年同期成长,带动全球逆变器市场装机量攀升至965万台左右,创近两年新高,反映...

关键字: 电动车 逆变器 电驱系统

March 13, 2026 ---- 根据TrendForce集邦咨询最新面板产业研究,由于技术世代更替与生产成本竞争压力提升,以及8.6代线新产能陆续开出,近年台系面板厂逐步关闭小世代产线,并积极发展新兴事业。另一方...

关键字: LCD 面板 笔电

March 13, 2026 ---- 根据TrendForce集邦咨询最新Enterprise SSD(企业级 SSD)产业调查,2025年第四季由于AI Inference(推理)应用普及提升对存储系统要求,且适逢企...

关键字: SSD 服务器 HDD

在现代电子系统设计中,隔离技术是保障电路安全、稳定运行的核心手段之一。无论是工业控制、医疗设备还是通信系统,信号隔离与电源隔离都扮演着不可或缺的角色。它们如同电路中的“防火墙”与“安全闸”,既能阻断危险电流与干扰信号的传...

关键字: 信号隔离 电源隔离

在智能手机导航精准指引、自动驾驶平稳行驶、物流车辆实时调度的当下,GPS(Global Positioning System)早已从军事专属技术,深度融入大众生活的方方面面。作为全球首个成熟的卫星导航系统,GPS凭借其全...

关键字: GPS 信号

在电子技术的庞大体系中,电容如同最基础却不可或缺的“万能配角”,以其独特的电荷储存与动态调节能力,支撑起从智能手机到航天飞船的无数精密系统。作为电子电路中应用最广泛的元件之一,电容的核心价值在于通过充放电过程对电压、电流...

关键字: 电容 电解电容

在MCU电路设计中,晶体振荡器是决定系统时钟精度与稳定性的核心部件。几乎所有参考设计都会在晶体两侧标注一对22pF左右的对地电容,但多数工程师仅将其视为“必须照做的惯例”,对其背后的原理知之甚少。直到某工控项目因省略这对...

关键字: MCU 晶体

在现代电子系统中,晶振是维持数字电路同步运作的"心脏",其输出的时钟信号精度直接决定了通信设备、工业控制器、消费电子等产品的性能稳定性。然而,看似简单的晶振布局选择,却可能成为产品EMC(电磁兼容性)测试失败、系统可靠性...

关键字: 晶振 EMC

在PCB(Printed Circuit Board,印制电路板)设计中,走线是连接电路元器件、实现信号传输与电源分配的核心环节。随着电子设备向高频、高速、高集成度方向发展,常规走线已无法满足复杂电路的性能需求,特殊走线...

关键字: PCB 电容

在嵌入式系统开发领域,Qt凭借其跨平台特性、丰富的GUI组件和高效的开发框架,成为构建交互式界面的首选工具之一。对于嵌入式工程师而言,掌握Qt不仅能提升开发效率,更能为智能设备、工业控制、汽车电子等领域的产品带来更优质的...

关键字: 嵌入式 QT
关闭