阅读:3034回复:1
希望大家看看SC2440下的SPI通讯程序。帮看看初始化代码。做2440和430通讯用。
目前我根据本论坛的2410的SPI的驱动,写了一个驱动。目的就是为了实现SC2440和MSP430的SPI通讯,CE测试程序控制,用示波器测试的情况就是,我使用的是SPI0,
能够看到MOSI上面的写数据的数据信号。停止了,数据也就停止了。 但是UCLK 时钟信号没有?这是我单独测试2440,没有接430的情况下面的效果。 大家帮忙看看初始化代码。 volatile IOPreg * v_pIOPregs; volatile SSPreg *v_pSSPregs; volatile CLKPWRreg * v_pclkpwrregs; BOOL SPI_InitAddrIO(VOID); BOOL SPI_InitAddrSPI(void); BOOL SPI_InitPwr(void); void InitSPI(void); void InitSPI(void) { unsigned int pclk = S2440PCLK; // s2410.h define // #define S2410FCLK (203 * 1000 * 1000) // 203MHz (FCLK). // #define PCLKDIV 4 // P-clock (PCLK) divisor. // #define S2410PCLK (S2410FCLK / PCLKDIV) // PCLK. v_pclkpwrregs->rCLKCON &= ~(0x40000); v_pclkpwrregs->rCLKCON |= (0x40000); //SPICLK0/GPE13 master clock //SPIMOSI0/GPE12 master out //SPIMISO0/GPE11 master in v_pIOPregs->rGPECON &= ~(0x3F << 22); v_pIOPregs->rGPECON |= (0x2A << 22); v_pIOPregs->rGPEUP |=(0X7 <<11); // v_pSSPregs->rSPPIN0 = 0x02; //EINT10/nSS0/GPG2 master SPI CS v_pIOPregs->rGPGCON &= ~(0x3 << 4); v_pIOPregs->rGPGCON |= (0x1 << 4); //2010-01-19 v_pIOPregs->rGPGUP &= ~(0x1 << 2);//enabled //Baudrate = 50750000/2/(24 + 1) = 1015000 = 1.015MHz v_pSSPregs->rSPPRE0 = 0x18; v_pSSPregs->rSPCON0 = 0x18; } // // ............省略了初始化IO地址 volatile IOPreg * v_pIOPregs;和 时钟 volatile CLKPWRreg * v_pclkpwrregs; ............和下面的SPI 初始化完全一摸一样。 BOOL SPI_InitAddrSPI(void) { BOOL RetValue = TRUE; v_pSSPregs = (volatile SSPreg *)VirtualAlloc(0, sizeof(SSPreg), MEM_RESERVE, PAGE_NOACCESS); if (v_pSSPregs == NULL) { ERRORMSG(1,(TEXT("For SPI_UART2regs : VirtualAlloc failed!\r\n"))); RetValue = FALSE; } else { if (!VirtualCopy((PVOID)v_pSSPregs, (PVOID)(SSP_BASE), sizeof(SSPreg), PAGE_READWRITE | PAGE_NOCACHE)) { ERRORMSG(1,(TEXT("For SPI_UART2regs: VirtualCopy failed!\r\n"))); RetValue = FALSE; } } if (!RetValue) { RETAILMSG (1, (TEXT("::: SPI_InitializeAddresses - Fail!!\r\n") )); if (v_pSSPregs) { VirtualFree((PVOID) v_pSSPregs, 0, MEM_RELEASE); } v_pSSPregs = NULL; } else { ; // RETAILMSG (1, (TEXT("SPI_InitializeAddresses - Success\r\n") )); } return(RetValue); } DWORD SPI_Init(DWORD dwContext) { // RETAILMSG(1,(TEXT("PMSINGS: SPI_ INIT\n"))); SPI_InitAddrIO(); SPI_InitAddrSPI(); SPI_InitPwr(); InitSPI(); return 0x01; } 谢谢,帮我看看,看看哪里有问题。。初始化。后面的驱动加载了。读写函数都正常。谢谢大家。 |
|
|
沙发#
发布于:2010-01-20 11:25
今天发现循环写数据的时候,UCLK 上面也有类似的数据信号,不知道怎么回事
|
|
|