3534|4

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于MPC8270 的SPI驱动 [复制链接]

小弟今天写了一段关于SPI的驱动代码。板子上是通过SPI对一块FLASH操作的。MPC作为master,FLASH作为slave。
下面是我的代码,主要就是一些寄存器的初始化,这是我第一次操刀写BSP,希望各位达人帮我看看有没有问题,大家相互交流一下!谢谢!

我把参数ram,rxBD和txBD,还有rxBuffer,txBuffer都放在dual_ram中,其中参数ram放在bank#11中,BD和BUFFER放在bank#2中。

在这段代码执行之前,我执行sysSerialHwInit(),在其中将Port D的16,17,18,19,20脚设置好,这段代码如下:

    * M8260_IOP_PDDIR(immrVal) &= 0xFFFF07FC;           /* clear first */
    * M8260_IOP_PDDIR(immrVal) |= 0x00000002;           /* TXD pin 30| RXD pin 31 */
    * M8260_IOP_PDDIR(immrVal) |= 0x00000010;           /* set bit 27 for SCC2 */
    * M8260_IOP_PDDIR(immrVal) &= ~0x00000008;           /* clear bit 28 for SCC2 */

    * M8260_IOP_PDPAR(immrVal) |= 0x00000003;           /* TXD pin 30| RXD pin 31 */
    * M8260_IOP_PDPAR(immrVal) |= 0x00000018;           /* set bits 27, 28 for SCC2*/
    * M8260_IOP_PDPAR(immrVal) |= 0x00000004;           /* set bit 29 for SCC2*/
    * M8260_IOP_PDPAR(immrVal) |= 0x00000020;           /* set bit 26 for SCC2*/
    * M8260_IOP_PDPAR(immrVal) |= 0x0000F000;           /* set bit 16,17,18,19 for SPI*/

    * M8260_IOP_PDSO(immrVal) &= 0xFFFFFFF8;         /* clear first */
    * M8260_IOP_PDSO(immrVal) |= 0x00000002;         /* TXD pin 30 and RXD pin 31 */
    * M8260_IOP_PDSO(immrVal) &= ~0x00000018;         /* clear bits 27, 28 for SCC2 */
    * M8260_IOP_PDSO(immrVal) &= ~0x00000020;         /* clear bit 26 for SCC2 */
    * M8260_IOP_PDSO(immrVal) |= 0x0000F000;         /* set bit 16,17,18,19 for SCC2 */

    * M8260_IOP_PDODR(immrVal) &= 0xFFFF08ED;       
    * M8260_IOP_PDDAT(immrVal) = 0x00000000;


  

/*
DESCRIPTION

This library contains routines for M8280 SPI BSP serial device
initialization
*/

#include "vxWorks.h"
#include "iv.h"
#include "intLib.h"
#include "config.h"
#include "sysLib.h"
#include "drv/parallel/m8260IOPort.h"
#include "drv/sio/m8260Cp.h"

IMPORT    UINT32  vxImmrGet (void);

#define M8260_SPMODE(base)        ((VINT32 *)((base) + 0x11AA0))
#define M8260_SPIE(base)        ((VINT32 *)((base) + 0x11AA6))
#define M8260_SPIM(base)        ((VINT32 *)((base) + 0x11AAA))
#define M8260_SPCOM(base)        ((VINT32 *)((base) + 0x11AAD))
#define M8260_SPI_BASE(base)        ((VINT32 *)((base) + 0x89FC))

#define M8260_SPI_PARARAM_OFFSET        0x9000       
#define M8260_SPI_RARARAM(base)                ((VINT32 *)((base) + M8260_SPI_PARARAM_OFFSET))       
#define M8260_SPI_RXBD_OFFSET                0x0800
#define M8260_SPI_RXBD(base)                ((VINT32 *)((base) + M8260_SPI_RXBD_OFFSET))
#define M8260_SPI_TXBD_OFFSET                0x0808
#define M8260_SPI_TXBD(base)                ((VINT32 *)((base) + M8260_SPI_RXBD_OFFSET))       

void sysSPIHwInit (void)
{

    int immrVal = vxImmrGet();
    *M8260_SPI_BASE=M8260_SPI_PARARAM_OFFSET;                /*assign the pointer to SPI parameter RAM*/
    *M8260_SPI_RARARAM(immrVal)=0x08080800;                /*set rx BD table and tx BD table base address*/
    *M8260_SPI_RARARAM(immrVal+0x4)=0x00101010;                /*set RFCR ,TFCR and MRBLR*/
    *M8260_SPI_RXBD(immrVal)=0x0000B000;                /*set rx BD */
    *M8260_SPI_RXBD(immrVal+4)=immrVal+0x0840;
    *M8260_SPI_TXBD(immrVal)=0x0000B800;                /*set tx BD */
    *M8260_SPI_TXBD(immrVal+4)=immrVal+0x0860;
    *M8260_CPCR(immrVal)=0x24510000;                        /*init rx and tx parameters*/
    *M8260_SPIE(immrVal)=0x000000FF;                        /*clear all SPI events*/
    *M8260_SPIM(immrVal)=0x00000037;                        /*enable all SPI interrupts*/
    *M8260_SPMODE(immrVal)=0x00000370;                        /*set SPI mode*/
   
}

明天去试试,希望各位大侠如果看出有什么问题,能给我指教!我感觉应该不止就这么点代码。
再次多谢了!!

最新回复

靠!这里还真是冷啊!  详情 回复 发表于 2010-2-21 21:46
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己先顶一下!
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
晕!都没有人啊!那么多达人了?!
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
我在MPC下的SPI驱动都是用GPIO模拟的,没用过SPI控制器,帮你顶
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
靠!这里还真是冷啊!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表