原创 LM3S6916硬件SPI驱动 AT45DB161D

2008-11-29 18:56 2619 2 3 分类: MCU/ 嵌入式

几个星期https://static.assets-stash.eet-china.com/album/old-resources/2008/11/29/cf1a6b99-0e89-44a8-9e87-a4d87c706154.rar之前做过用LM3S6916硬件SPI驱动AT45DB161D的实验,实现了一些简单的功能,后来因为工程中没有再用到AT45DB161D,所以没有再继续做下去。


代码是在网上找的gxlujd(彩虹)写的“ATMEL的DATAFLASH操作函数库(FOR AT45DB161D)”,只要改SPI操作方面的函数就行了。


/* Peripheral definitions for EK-LM3S6965 board */
#define SDC_SSI_BASE            SSI0_BASE
#define SDC_SSI_SYSCTL_PERIPH   SYSCTL_PERIPH_SSI0
#define SDC_GPIO_PORT_BASE      GPIO_PORTA_BASE
#define SDC_GPIO_SYSCTL_PERIPH  SYSCTL_PERIPH_GPIOA


#define SDC_SSI_CLK             GPIO_PIN_2
#define SDC_SSI_TX              GPIO_PIN_5
#define SDC_SSI_RX              GPIO_PIN_4


#define SDC_SSI_PINS            (SDC_SSI_TX | SDC_SSI_RX | SDC_SSI_CLK)


#define SDC_CS_GPIO_PORT_BASE      GPIO_PORTA_BASE
#define SDC_CS_GPIO_SYSCTL_PERIPH  SYSCTL_PERIPH_GPIOA
#define SDC_CS                     GPIO_PIN_6


#define Select_Card()           GPIOPinWrite(SDC_CS_GPIO_PORT_BASE, SDC_CS, 0)
#define Deselect_Card()         GPIOPinWrite(SDC_CS_GPIO_PORT_BASE, SDC_CS, SDC_CS)



/*--------------------------- spi_hi_speed ----------------------------------*/
#define HI 1
#define LO 0
void spi_hi_speed(unsigned char on)
{
   /* Set a SPI clock speed to desired value. */


   SSIDisable(SDC_SSI_BASE);
   if(on == HI){
      /* Max. 20 MBit used for Data Transfer. */
      SSIConfig(SDC_SSI_BASE, SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER,SysCtlClockGet() / 2, 8);
   }
   else {
      /* Max. 400 kBit used in Card Initialization. */
      SSIConfig(SDC_SSI_BASE, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 400000, 8);
   }
   SSIEnable(SDC_SSI_BASE);
}


/*--------------------------- spi_send --------------------------------------*/
unsigned char spi_send(unsigned char outb)
{
   // Write and Read a byte on SPI interface.
   unsigned long inb;


   SSIDataPut(SDC_SSI_BASE, outb);
   SSIDataGet(SDC_SSI_BASE, (unsigned long *)&inb);


   return (inb);
}



//*****************************************************************************
//
// SramInit puts the SRAM device in burst mode then polls the status register
// for a valid status response. Returns True if successful.
//
//*****************************************************************************
void SPI_Init(void)
{
 /* Initialize and enable the SSP Interface module. */
 unsigned long i;
 
 /* Enable the peripherals used to drive the SDC on SSI, and the CS */
 SysCtlPeripheralEnable(SDC_SSI_SYSCTL_PERIPH);
 SysCtlPeripheralEnable(SDC_GPIO_SYSCTL_PERIPH);
 SysCtlPeripheralEnable(SDC_CS_GPIO_SYSCTL_PERIPH);
 
 /* Configure the appropriate pins to be SSI instead of GPIO */
 GPIODirModeSet(SDC_GPIO_PORT_BASE, SDC_SSI_PINS, GPIO_DIR_MODE_HW);
 GPIODirModeSet(SDC_CS_GPIO_PORT_BASE, SDC_CS, GPIO_DIR_MODE_OUT);
 GPIOPadConfigSet(SDC_GPIO_PORT_BASE, SDC_SSI_CLK, GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD_WPU);
 GPIOPadConfigSet(SDC_GPIO_PORT_BASE, SDC_SSI_TX | SDC_SSI_RX,GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD_WPU);
 GPIOPadConfigSet(SDC_CS_GPIO_PORT_BASE, SDC_CS,GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD_WPU);
 
 /* Deassert the SSI0 chip select */
 GPIOPinWrite(SDC_CS_GPIO_PORT_BASE, SDC_CS, SDC_CS);
 
 /* Configure the SSI0 port */
 SSIConfig(SDC_SSI_BASE, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 400000, 8);
 SSIEnable(SDC_SSI_BASE);
 
 /* Send SPI Command with card not selected at 400 KBit. */
 Deselect_Card();
 for (i = 0; i < 16; i++)spi_send(0xFF);
}


其他的没有改动,完整代码在附件中,其中包含有LCDTG12232的驱动,感谢gxlujd(彩虹)无私共享源代码!


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户215995 2009-8-3 23:46

最近使用LM3S1138驱动,感谢楼主无私奉献
相关推荐阅读
用户1012 2009-06-27 22:42
好久没有写博客了
好久没有写博客了,以前的内容只是乱写,见不得人的,呵呵,这段时间心中有很多的困惑,也思考过自己的未来和现状,现状是让自己很不满意的,所做的工作,家庭生活,学习,都很不如意.只有提升自己才有出路,文凭成...
用户1012 2009-06-27 22:31
长虹LT3212 不能搜台的维修
今晚邻居家的电视坏了,是长虹LT3212,搜索不到台,我到网上查了一下,很多人在网上发表有这个问题,搜索到一个网页,作者说是高视频头里面有两个电解电容有问题,一个10uf,一个2.2uf的,换了就行了...
用户1012 2009-01-15 01:28
lm3s6916的晶振
lm3s6916的晶振http://blog.ednchina.com/lds24原创  在写lm3s6916程序过程中,一直都是惊喜不断的,举步艰难。http://blog.ednchina.com...
用户1012 2009-01-11 00:56
好郁闷啊!!!!
http://blog.ednchina.com/lds24原创  郁闷啊,花了一个小时写的,最后一个错误的粘帖操作就全没了,重写一次,累。http://blog.ednchina.com/lds24...
用户1012 2008-12-12 09:14
现在电脑每天开机后十几分钟都会都死一次机,重启后就一天都能正常使用
现在电脑每天开机后十几分钟都会都死一次机,重启后就一天都能正常使用,在网上查了一下,有很多人遇到这个问题,但就好像没有什么好的解决办法,呵呵,迟点要大修一次了。...
用户1012 2008-12-10 12:46
昨天大摆乌龙,要买的人OV528变成买了LPC2368
昨天大摆乌龙,要买的人OV528变成买了LPC2368前几天在淘宝上找过OV528和LPC2368,把LPC2368放到了购买的宝贝里,后来把这事忘了,昨天有商家打电话来问是不是要买IC,我说是啊,我...
我要评论
1
2
关闭 站长推荐上一条 /1 下一条