/*************************************************************************************************************
* 文件名: AC97.h
* 功能: S3C6410 AC97底层驱动函数
* 作者: cp1300@139.com
* 创建时间: 2012年10月6日20:41
* 最后修改时间:2012年10月6日
* 详细: AC97控制器底层驱动
*************************************************************************************************************/
#ifndef AC97_H_
#define AC97_H_
//AC97控制器状态
typedef enum
{
AC97_State_Idle = 0,
AC97_State_Init = 1,
AC97_State_Ready = 2,
AC97_State_Active = 3,
AC97_State_LP = 4,
AC97_State_Warm = 5
}AC97_State;
//AC97读写命令控制
typedef enum
{
AC97_WRITE = 0,
AC97_READ = 1
}AC97_CMD;
u8 AC97_Init(void); //AC97初始化
u16 AC97_CodeCMD(AC97_CMD AC97_RW,u8 RegAddr,u16 CmdData);
void AC97_IntEnable(u32 Int,u8 Enable);
void AC97_IntClear(u32 Int);
u32 AC97_GetIntStatus(void);
AC97_State AC97_GetContStatus(void);
#endif /*AC97_H_*/
//main.c
#include "system.h"
#include "uart.h"
#include "tft_lcd.h"
#include "other.h"
#include "delay.h"
#include "timer.h"
#include "ac97.h"
//LED1闪烁程序,在定时器0中断服务程序中闪烁,周期400MS
void LED1_flash(void)
{
LED1_FLASH();
}
int main(void)
{
LCD_Init(); //初始化LCD
UART0_Init(DISABLE,115200); //初始化串口,失能中断接收,波特率115200
LED_Init(); //初始化LED
Timer1_Init(400000-1,ENABLE,LED1_flash); //初始化定时器0,周期400ms
lcd_printf("Get_FCLK : %d Hz\n",Get_FCLK());
lcd_printf("Get_PCLK : %d Hz\n",Get_PCLK());
if(AC97_Init()) //初始化AC97控制器
{
lcd_printf("AC97 Init error!\n");
}
else
{
lcd_printf("AC97 Init OK!\n");
}
lcd_printf("0x%X\n",AC97_CodeCMD(AC97_READ,0x7c,0));
lcd_printf("0x%X\n",AC97_CodeCMD(AC97_READ,0x7e,0));
while(1)
{
LED2_FLASH(); //LED2闪烁
Delay_US(600000);
}
}
我读取这两个寄存器的值,但是读取到的一直是0,不知道问题在哪