winter 发表于 2010-7-10 22:51:55

AVR 与 FT245 代码 GCC

前几天折腾下,这个片子很好用。而且内置了输入输出的缓冲。和FT232,PL2303不同的时候,在MCU端是并口通讯。所以比较适合大吞吐量。
代码照抄USBISP的。

/**
*
*   FT245.c
*
*   Compiler    : WinAVR-20100110
*   Version   : 1.0
**/
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>


#define FT245_TXE         PING4
#define FT245_RXF         PING3

#define FT245_WR_active   sbi(PORTG,PG1)
#define FT245_WR_inactive   cbi(PORTG,PG1)

#define FT245_RD_active   cbi(PORTG,PG0)
#define FT245_RD_inactive   sbi(PORTG,PG0)

#define R_FT245_DATA      PIND
#define W_FT245_DATA      PORTD

void Ft245_Init(void)
{
    PORTD = 0xFF;
    DDRD= 0x00;

    PORTG |= (1<<PG4)|(1<<PG3)|(1<<PG0);
    DDRG|= (1<<DDG1)|(1<<DDG0);

    PORTB |= (1<<PB7)|(1<<PB6);
    DDRB|= (1<<DDB7);
}

void FT245_Write(unsigned char ftData)
{
    while (PING & (1<<FT245_TXE));

    DDRD= 0xFF;
    PORTD = ftData;
    FT245_WR_active;
    asm("NOP");
    FT245_WR_inactive;

    DDRD= 0x00;
    PORTD = 0xFF;
}

signed int FT245_Read(void)
{
    unsigned char ftData = 0x00;

    if (!(PING & (1<<FT245_RXF)))
    {

      FT245_RD_active;
      asm("NOP");
      FT245_RD_inactive;
      ftData = PIND;

      return ftData;
    }

    return -1;
}

chenjm 发表于 2013-1-21 11:22:45

signed int FT245_Read函数中,PD口还没置为输入口吧。

chenjm 发表于 2013-1-21 14:23:42

为什么我总是接收到0xff?

chenjm 发表于 2013-1-21 14:48:09

哦,搞掂了。
页: [1]
查看完整版本: AVR 与 FT245 代码 GCC