搜索
bottom↓
回复: 3

[求助] atmega162+cf卡自制MP3 怎么读寄存器 cf卡位True Ide模式

[复制链接]

出0入0汤圆

发表于 2010-3-8 14:07:15 | 显示全部楼层 |阅读模式
主要代码如下:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
?Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 2010-3-7
Author  :
Company :
Comments:


Chip type           : ATmega162
Program type        : Application
Clock frequency     : 4.000000 MHz
Memory model        : Small
External RAM size   : 0
Data Stack size     : 256
*****************************************************/

#include <mega162.h>
#include <delay.h>

#define uint8_t char
#define uint16_t int
#define uint32_t long int






#define  CF_DATA_REG 0               
#define CF_ERROR_REG 1              
#define CF_FEATURE_REG 1            
#define CF_SECTOR_COUNT_REG 2        
#define CF_SECTOR_REG 3              
#define CF_LBA_0_7_REG 3
#define CF_CYLINDER_L_REG 4            
#define CF_LBA_8_15_REG  4            
#define CF_CYLINDER_H_REG 5         
#define CF_LBA_16_23_REG 5           
#define CF_HEAD_REG  6               
#define CF_LBA_24_27_REG  6           
#define CF_DRIVER_REG  6            
#define CF_STATUS_REG  7              
#define CF_COMMAND_REG 7            

#define CCF_DATA_REG                PORTC&=0xf8
#define CCF_ERROR_REG               PORTC=(PORTC&0xf8)|0x01
#define CCF_FEATURE_REG             PORTC=(PORTC&0xf8)|0x01
#define CCF_SECTOR_COUNT_REG        PORTC=(PORTC&0xf8)|0x02
#define CCF_SECTOR_REG              PORTC=(PORTC&0xf8)|0x03
#define CCF_LBA_0_7_REG             PORTC=(PORTC&0xf8)|0x03
#define CCF_CYLINDER_L_REG          PORTC=(PORTC&0xf8)|0x04
#define CCF_LBA_8_15_REG            PORTC=(PORTC&0xf8)|0x04
#define CCF_CYLINDER_H_REG          PORTC=(PORTC&0xf8)|0x05
#define CCF_LBA_16_23_REG           PORTC=(PORTC&0xf8)|0x05
#define CCF_HEAD_REG                PORTC=(PORTC&0xf8)|0x06
#define CCF_LBA_24_27_REG           PORTC=(PORTC&0xf8)|0x06
#define CCF_DRIVER_REG              PORTC=(PORTC&0xf8)|0x06
#define CCF_STATUS_REG              PORTC=(PORTC&0xf8)|0x07
#define CCF_COMMAND_REG             PORTC=(PORTC&0xf8)|0x07

#define CF_CMD_DIAGNOSTIC        0x90    //诊断
#define CF_CMD_IDENTITY            0xec    //读CF卡信息
#define CF_CMD_READSECTOR        0x20    //读扇区
#define CF_CMD_SETFEATURE        0xef    //设置特性
#define CF_CMD_SLEEP            0x99    //进入Sleep模式(省电)
#define CF_CMD_STANDBY            0x96    //进入Standby模式
#define CF_CMD_WRITESECTOR        0x30    //写扇区

#define CF_LBA_MASTER            0xe0
#define CF_LBA_SLAVE            0xf0

extern uint16_t CF_DataOffset;
extern uint32_t CF_CurrentLBA;




uint16_t CF_DataOffset;
uint32_t CF_CurrentLBA;

void outb(char reg,char data)//把data写入reg寄存器函数
{  

   
switch (reg) //选择寄存器
{   
      
     
   
   
case CF_DATA_REG: {
CCF_DATA_REG;
break;}                 
case CF_ERROR_REG: {CCF_ERROR_REG; break;}            
//case CF_FEATURE_REG: {CCF_FEATURE_REG; break;}            
case CF_SECTOR_COUNT_REG: {CCF_SECTOR_COUNT_REG; break;}        
case CF_SECTOR_REG: {CCF_SECTOR_REG; break;}              
//case CF_LBA_0_7_REG: {CCF_LBA_0_7_REG; break;}            
case CF_CYLINDER_L_REG: {CCF_CYLINDER_L_REG; break;}         
//case CF_LBA_8_15_REG: {CCF_LBA_8_15_REG; break;}            
case CF_CYLINDER_H_REG: {CCF_CYLINDER_H_REG; break;}         
//case CF_LBA_16_23_REG: {CCF_LBA_16_23_REG; break;}           
case CF_HEAD_REG: {CCF_HEAD_REG; break;}               
//case CF_LBA_24_27_REG: {CCF_LBA_24_27_REG; break;}           
//case CF_DRIVER_REG: {CCF_DRIVER_REG; break;}              
case CF_STATUS_REG: {CCF_STATUS_REG; break;}              
//case CF_COMMAND_REG: {CCF_COMMAND_REG; break;}            

   };      
  PORTD.7=0;  
     PORTD.6=1;
     
      #asm("nop")
     #asm("nop")
     #asm("nop")  
        #asm("nop")
     #asm("nop")
  
     delay_ms(10);
     PORTD.6=0;
    PORTD.7=1;
   
      
   
   

     
     #asm("nop")
     #asm("nop")
     #asm("nop")
     
   
     
   

     
     
     
     DDRA=0xff;
     #asm("nop")
     #asm("nop")
   
     PORTA=data;
     #asm("nop")
     #asm("nop")
     delay_ms(10);
     
   
}

uint8_t inb(char reg)//读寄存器函数
{
     char data_buf;
     
     
   
   
   

     
   
   
     
  

switch (reg)
{
case CF_DATA_REG: {
CCF_DATA_REG;
break;}                 
case CF_ERROR_REG: {CCF_ERROR_REG; break;}            
//case CF_FEATURE_REG: {CCF_FEATURE_REG; break;}            
case CF_SECTOR_COUNT_REG: {CCF_SECTOR_COUNT_REG; break;}        
case CF_SECTOR_REG: {CCF_SECTOR_REG; break;}              
//case CF_LBA_0_7_REG: {CCF_LBA_0_7_REG; break;}            
case CF_CYLINDER_L_REG: {CCF_CYLINDER_L_REG; break;}         
//case CF_LBA_8_15_REG: {CCF_LBA_8_15_REG; break;}            
case CF_CYLINDER_H_REG: {CCF_CYLINDER_H_REG; break;}         
//case CF_LBA_16_23_REG: {CCF_LBA_16_23_REG; break;}           
case CF_HEAD_REG: {CCF_HEAD_REG; break;}               
//case CF_LBA_24_27_REG: {CCF_LBA_24_27_REG; break;}           
//case CF_DRIVER_REG: {CCF_DRIVER_REG; break;}              
case CF_STATUS_REG: {CCF_STATUS_REG; break;}              
//case CF_COMMAND_REG: {CCF_COMMAND_REG; break;}            

};

     PORTD.6=0;
     
      PORTD.7=1;
     #asm("nop")
     #asm("nop")
     #asm("nop")
     delay_ms(10);
     PORTD.6=1;
     
     PORTD.7=0;
     #asm("nop")
     #asm("nop")
     #asm("nop")
   

     
        
     DDRA=0x00;
     #asm("nop")
     #asm("nop")
     
     data_buf=PINA;
       #asm("nop")
     #asm("nop")
     delay_ms(10);
  
     
     
     return  data_buf;

}






// Declare your global variables here

void main(void)
{
char data;
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0xff;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
DDRC.0=1;
DDRC.1=1;
DDRC.2=1;


// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0xc0;

// Port E initialization
// Func2=In Func1=In Func0=In
// State2=T State1=T State0=T
PORTE=0x00;
DDRE=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// Timer/Counter 3 initialization
// Clock value: Timer 3 Stopped
// Mode: Normal top=FFFFh
// Noise Canceler: Off
// Input Capture on Falling Edge
// OC3A output: Discon.
// OC3B output: Discon.
// Timer 3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// Interrupt on any change on pins PCINT0-7: Off
// Interrupt on any change on pins PCINT8-15: Off
MCUCR=0x00;
EMCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
ETIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

while (1)
      {
              outb(CF_ERROR_REG, 0x11);//先写出数据
      DDRA=0x00;
      
      data=inb(CF_ERROR_REG);//再读入数据
      DDRB=0xff;
      
      PORTB=data;//读入的数据由PORTB输出
   
   

      // Place your code here

      };
}

prtues7仿真 编译器是CodeVision(2008那个版本的)ourdev_537189.zip(文件大小:17K) (原文件名:图与c文件.zip)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2010-3-8 14:09:12 | 显示全部楼层
补个图

(原文件名:0N%2$D$S]A}$UR49C_GW11J.jpg)

出0入0汤圆

 楼主| 发表于 2010-3-8 14:09:58 | 显示全部楼层
高手帮忙看下为什么读不出来寄存器

出0入0汤圆

 楼主| 发表于 2010-3-8 14:11:00 | 显示全部楼层
是读cf卡的寄存器
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-13 10:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表