在线时间0 小时
UID116571
注册时间2009-3-17
NXP金币0
该用户从未签到
新手上路

- 积分
- 7703
- 最后登录
- 1970-1-1
|

楼主 |
发表于 2009-12-11 21:37:22
|
显示全部楼层
回复:DIY飞思卡尔MCF52259开发板
<span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif, 宋体; font-size: 14px; color: rgb(51, 51, 51); line-height: 21px; "> 这是本次diy活动哦开发板demo例程之一:利用MCF52259片上i2c 控制器读写常用的at24c02 eeprom
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.6em; ">
//filename: i2c_driver.h
//mcf52259 i2c驱动头文件
#ifndef _NICROSYSTEM_NSCF52259R1_I2C_DRIVER_H_
#define _NICROSYSTEM_NSCF52259R1_I2C_DRIVER_H_
void init_i2c();
void i2c_start();
unsigned char i2c_send_byte(unsigned char c);
unsigned char i2c_recv_byte(unsigned char ack);
void i2c_stop();
void i2c_restart();
#endif
//Filename: i2c_driver.c
//MCF52259 I2c驱动
#include "support_common.h" /* include peripheral declarations and more */
#include "i2c_driver.h"
void init_i2c()
{
unsigned char temp;
MCF_GPIO_PASPAR |=MCF_GPIO_PASPAR_SCL0_SCL0 |MCF_GPIO_PASPAR_SDA0_SDA0 ;
MCF_I2C_I2FDR(0)=MCF_I2C_I2FDR_IC(0x3A);//about 100khz
MCF_I2C_I2ADR(0)=0xf0;
MCF_I2C_I2CR(0)=0x80;//enable i2c
// MCF_I2C1_I2CR=0;
if(MCF_I2C_I2SR(0)&MCF_I2C_I2SR_IBB)
{
MCF_I2C_I2CR(0)=0x0;
MCF_I2C_I2CR(0)=MCF_I2C_I2CR_IEN | /* enable module */
MCF_I2C_I2CR_MSTA;
temp=MCF_I2C_I2DR(0);
MCF_I2C_I2SR(0)=0;
MCF_I2C_I2CR(0)=0x0;
MCF_I2C_I2CR(0)=0x80;//enable i2c
}
}
void i2c_start()
{
while(MCF_I2C_I2SR(0)&MCF_I2C_I2SR_IBB);
MCF_I2C_I2CR(0)|=MCF_I2C_I2CR_MTX ;
MCF_I2C_I2CR(0)|=MCF_I2C_I2CR_MSTA ;
}
unsigned char i2c_send_byte(unsigned char c)
{
// MCF_I2C0_I2CR|=MCF_I2C_I2CR_MTX ;
// if(MCF_I2C0_I2SR|MCF_I2C_I2SR_IAL)
// {
//arbitration lost
// MCF_I2C0_I2SR&=~MCF_I2C_I2SR_IAL ;
// }
// i2c_start();
// MCF_I2C_I2CR(0)|=MCF_I2C_I2CR_MTX ;
// MCF_I2C_I2CR(0)|=MCF_I2C_I2CR_MSTA ;
MCF_I2C_I2DR(0)=c;
while((MCF_I2C_I2SR(0)&MCF_I2C_I2SR_IIF)==0)
{
}
MCF_I2C_I2SR(0)&=~MCF_I2C_I2SR_IIF;
if(MCF_I2C_I2SR(0)&MCF_I2C_I2SR_RXAK)
return 1;//failed
else
return 0;//success
}
unsigned char i2c_recv_byte(unsigned char ack)
{
unsigned char temp;
if(ack>0)
{
MCF_I2C_I2CR(0)|=MCF_I2C_I2CR_TXAK;
}
else
{
MCF_I2C_I2CR(0)&=~MCF_I2C_I2CR_TXAK;
}
MCF_I2C_I2CR(0)&=~MCF_I2C_I2CR_MTX ;
temp=MCF_I2C_I2DR(0);
while((MCF_I2C_I2SR(0)&MCF_I2C_I2SR_IIF)==0)
{
}
MCF_I2C_I2SR(0)&=~MCF_I2C_I2SR_IIF;
temp= MCF_I2C_I2DR(0);
while((MCF_I2C_I2SR(0)&MCF_I2C_I2SR_IIF)==0)
{
}
MCF_I2C_I2SR(0)&=~MCF_I2C_I2SR_IIF;
return temp;
}
void i2c_stop()
{
MCF_I2C_I2CR(0)&=~MCF_I2C_I2CR_MSTA ;
}
void i2c_restart()
{
MCF_I2C_I2CR(0)|=MCF_I2C_I2CR_RSTA;
}
//Filename: uart.h
//串口驱动头文件
#ifndef _NICROSYSTEM_NSMCF52259R1_UART_H_
#define _NICROSYSTEM_NSMCF52259R1_UART_H_
#include "support_common.h"
void uart_putstr(uint8 channel, char *str);
void uart_putchar (uint8 channel, char ch);
char uart_getchar (uint8 channel);
void set_gpio_uart(uint8 channel);
uint8 uart_init(uint8 channel,uint32 sysClockKhz,uint32 baudRate);
#endif
//filename:uart.c
//串口驱动
#include "uart.h"
uint8 uart_init(uint8 channel,uint32 sysClockKhz,uint32 baudRate)
{
uint16 ubgs;
if(channel>2)
{
return 1;//error
}
set_gpio_uart(channel);
/*
* Reset Transmitter
*/
MCF_UART_UCR(channel) = MCF_UART_UCR_RESET_TX;
/*
* Reset Receiver
*/
MCF_UART_UCR(channel) = MCF_UART_UCR_RESET_RX;
/*
* Reset Mode Register
*/
MCF_UART_UCR(channel) = MCF_UART_UCR_RESET_MR;
/*
* No parity, 8-bits per character
*/
MCF_UART_UMR(channel) = (0
| MCF_UART_UMR_PM_NONE
| MCF_UART_UMR_BC_8 );
/*
* No echo or loopback, 1 stop bit
*/
MCF_UART_UMR(channel) = (0
| MCF_UART_UMR_CM_NORMAL
| MCF_UART_UMR_SB_STOP_BITS_1);
/*
* Set Rx and Tx baud by SYSTEM CLOCK
*/
MCF_UART_UCSR(channel) = (0
| MCF_UART_UCSR_RCS_SYS_CLK
| MCF_UART_UCSR_TCS_SYS_CLK);
/*
* Mask all UART interrupts
*/
MCF_UART_UIMR(channel) = 0;
/*
* Calculate baud settings
*/
ubgs = (uint16)((sysClockKhz * 1000)/(baudRate * 32));
MCF_UART_UBG1(channel) = (uint8)((ubgs & 0xFF00) >> 8);
MCF_UART_UBG2(channel) = (uint8)(ubgs & 0x00FF);
/*
* Enable receiver and transmitter
*/
MCF_UART_UCR(channel) = (0
| MCF_UART_UCR_TX_ENABLED
| MCF_UART_UCR_RX_ENABLED);
return 0;//success
}
<font class="Apple-style-span" color="#333333" face="Arial, Helvetica, sans-serif" style="line-height: 1.6em; "><span class="Apple-style-span" style="line-height: 24px; font-size: small; ">void set_gpio_uart(uint8 channel)
{
switch(channel)
{
case 0:
MCF_GPIO_PUAPAR|=MCF_GPIO_PUAPAR_UTXD0_UTXD0 |
MCF_GPIO_PUAPAR_URXD0_URXD0 |MCF_GPIO_PUAPAR_URTS0_URTS0 |
MCF_GPIO_PUAPAR_UCTS0_UCTS0 ;
break; |
|