本帖最后由 一只耳朵怪 于 2018-5-25 14:42 编辑
现在在调试一个程序,把DM642的MCBSP0接口配置成SPI接口,与带spi接口的存储器进行通讯,发送没有问题,以查询的方式接收数据时SPI_CLK上没有信号,片选也没有信号。请大家帮忙分析下,代码如下:
sta
tic MCBSP_Config ConfigSPI =
[
MCBSP_SPCR_RMK //Serial Port Control Register (SPCR)
(
MCBSP_SPCR_FREE_NO, // FREE RUNNING DISABLED //MCBSP_SPCR_FREE_YES, // 1Serial clock free running mode(FREE)
MCBSP_SPCR_SOFT_NO, // SOFT DISABLED //MCBSP_SPCR_SOFT_YES, // 1Serial clock emulation mode(SOFT)
MCBSP_SPCR_FRST_YES, // 0Frame sync generator reset(FRST)
MCBSP_SPCR_GRST_YES, // 0Sample rate generator reset(GRST)
MCBSP_SPCR_XINTM_DEFAULT,//MCBSP_SPCR_XINTM_XRDY, // 0;Transmit interrupt mode(XINTM)
MCBSP_SPCR_XSYNCERR_NO, // 0Transmit synchronization error
MCBSP_SPCR_XRST_YES, // 0Transmitter reset(XRST)
MCBSP_SPCR_DLB_OFF, // 0Digital loopback(DLB) mode
MCBSP_SPCR_RJUST_RZF, // 0Receive data sign-extension and
// justification mode(RJUST)
MCBSP_SPCR_CLKSTP_NODELAY,//MCBSP_SPCR_CLKSTP_DELAY,//MCBSP_SPCR_CLKSTP_DISABLE, //0Clock stop(CLKSTP) mode
//CLKSTP=11b with CLKXP=0, clock starts with
MCBSP_SPCR_DXENA_OFF, // 0DX Enabler(DXENA) -Extra delay for
// DX turn-on time.
MCBSP_SPCR_RINTM_RRDY, //0Receive interrupt(RINT) mode
MCBSP_SPCR_RSYNCERR_NO, //0Receive synchronization error(RSYNCERR)
MCBSP_SPCR_RRST_YES //0Receiver reset(RRST)
),
MCBSP_RCR_RMK // Receive Control Register (RCR)
(
MCBSP_RCR_RPHASE_SINGLE, //0 Receive phases
//MCBSP_RCR_RFRLEN2_OF(0), // Receive frame length
// in phase 2(RFRLEN2)
MCBSP_RCR_RFRLEN2_DEFAULT, //0
MCBSP_RCR_RWDLEN2_8BIT, //0 Receive element length
// in phase 2(RWDLEN2)
MCBSP_RCR_RCOMPAND_MSB, //0 Receive companding mode (RCOMPAND)
// MCBSP_RCR_RFIG_NO, //1 Receive frame ignore(RFIG)
MCBSP_RCR_RFIG_YES, //0
MCBSP_RCR_RDATDLY_1BIT, //0 Receive data delay(RDATDLY)
// MCBSP_RCR_RDATDLY_DEFAULT,//MCBSP_RCR_RDATDLY_0BIT, //1
MCBSP_RCR_RFRLEN1_DEFAULT,//MCBSP_RCR_RFRLEN1_OF(0), // Receive frame length
// in phase 1(RFRLEN1)
// MCBSP_RCR_RFRLEN1_DEFAULT,
//MCBSP_RCR_RWDLEN1_32BIT, // Receive element length
// in phase 1(RWDLEN1)
MCBSP_RCR_RWDLEN1_8BIT,
MCBSP_RCR_RWDREVRS_DISABLE // Receive 8-bit bit reversal
// feature.(RWDREVRS)
),
MCBSP_XCR_RMK //Transmit Control Register (XCR)
(
MCBSP_XCR_XPHASE_SINGLE, // 0Transmit phases单相帧
// in phase 2(XFRLEN2)
MCBSP_XCR_XFRLEN2_DEFAULT, //0
MCBSP_XCR_XWDLEN2_8BIT, //0Transmit element length
// in phase 2
MCBSP_XCR_XCOMPAND_MSB, //0 Transmit companding mode(XCOMPAND)
// MCBSP_XCR_XFIG_YES, // Transmit frame ignore(XFIG)
MCBSP_XCR_XFIG_YES,
MCBSP_XCR_XDATDLY_1BIT, // Transmit data delay(XDATDLY)
MCBSP_XCR_XFRLEN1_DEFAULT, //0 帧长度为一个数据包
MCBSP_XCR_XWDLEN1_8BIT, // Transmit element length in phase 1(XWDLEN1)
MCBSP_XCR_XWDREVRS_DISABLE // Transmit 8-bit bit reversal feature
),
MCBSP_SRGR_RMK //serial port sample rate generator register(SRGR)
(
MCBSP_SRGR_GSYNC_FREE, // 0Sample rate generator clock
// synchronization(GSYNC).
MCBSP_SRGR_CLKSP_RISING, //0 CLKS polarity clock edge select(CLKSP)
MCBSP_SRGR_CLKSM_INTERNAL, //1 MCBSP sample rate generator clock
// mode(CLKSM)
MCBSP_SRGR_FSGM_DEFAULT,//MCBSP_SRGR_FSGM_DXR2XSR, //0 Sample rate generator transmit frame
// synchronization
// MCBSP_SRGR_FPER_OF(63), // Frame period(FPER)
MCBSP_SRGR_FPER_DEFAULT, //0
// MCBSP_SRGR_FWID_OF(31), // Frame width(FWID)
MCBSP_SRGR_FWID_DEFAULT, //0
MCBSP_SRGR_CLKGDV_OF(149) // SPI_clk 3MHz// Sample rate generator clock,DM642为4分频
// divider(CLKGDV)
),
MCBSP_MCR_DEFAULT, // Using default value of MCR register
MCBSP_RCERE0_DEFAULT, // Using default value of RCERE registers
MCBSP_RCERE1_DEFAULT,
MCBSP_RCERE2_DEFAULT,
MCBSP_RCERE3_DEFAULT,
MCBSP_XCERE0_DEFAULT, // Using default value of XCERE registers
MCBSP_XCERE1_DEFAULT,
MCBSP_XCERE2_DEFAULT,
MCBSP_XCERE3_DEFAULT,
MCBSP_PCR_RMK //serial port pin control register(PCR)
(
MCBSP_PCR_XIOEN_SP, // Transmitter in general-purpose I/O mode
MCBSP_PCR_RIOEN_SP, // Receiver in general-purpose I/O mode
MCBSP_PCR_FSXM_INTERNAL, //1 Transmit frame synchronization mode
MCBSP_PCR_FSRM_EXTERNAL, // Receive frame synchronization mode
// MCBSP_PCR_FSRM_INTERNAL, //1
MCBSP_PCR_CLKXM_OUTPUT, //1Transmitter clock mode (CLKXM)
MCBSP_PCR_CLKRM_OUTPUT, //1
MCBSP_PCR_CLKSSTAT_0, //0 CLKS pin status(CLKSSTAT)
MCBSP_PCR_DXSTAT_0, //0 DX pin status(DXSTAT)
MCBSP_PCR_FSXP_ACTIVELOW, //1
//MCBSP_PCR_FSRP_ACTIVEHIGH,
MCBSP_PCR_FSRP_ACTIVELOW, //0 Receive frame synchronization polarity(FSRP)
MCBSP_PCR_CLKXP_RISING, //0 Transmit clock polarity(CLKXP)
MCBSP_PCR_CLKRP_FALLING //0 Receive clock polarity(CLKRP)
)
];
void init_mcbsp_spi()
[
unsigned char i;
//Open up serial port 1
hMcbsp = MCBSP_open(MCBSP_DEV0, MCBSP_OPEN_RESET);
if(hMcbsp == INV)
[
exit(1);
]
//Configure McBSP for digital loopback, 8bit mode
// and setup the sample rate generator to allow self clocking
MCBSP_config(hMcbsp, &ConfigSPI);
for(i = 0;i < 10;i++);
//Enable McBSP in steps
MCBSP_start(hMcbsp, MCBSP_RCV_START | //MCBSP_SPCR_XRST_NO | MCBSP_SPCR_RRST_NO | MCBSP_SPCR_GRST_NO |
MCBSP_XMIT_START |
MCBSP_SRGR_START |
MCBSP_SRGR_FRAMESYNC,
MCBSP_SRGR_DEFAULT_DELAY);
delay(10);
for(i = 0;i < 10;i++);
]
Uint8 spi_rec_byte(void)
[
Uint8 x;
Uint32 y;
unsigned int i;
while (!MCBSP_rrdy(hMcbsp))[];
x = (unsigned char )DRR0;
/* y =MCBSP_read(hMcbsp);
for(i = 100;i > 0;i--);
x=(Uint8)y;
*/
return(x); /* 读取收到的字节 read the byte received */
]
0