- #include <stdio.h>
- #include <csl.h>
- #include <csl_pll.h>
- #include <csl_gpio.h>
- #include <csl_mcbsp.h>
- //#include <csl_irq.h>
- //---------Global constants---------
- #define N 20
- /*锁相环的设置*/
- PLL_Config myConfig = {
- 0, //IAI: the PLL locks using the same process that was underway
- //before the idle mode was entered
- 1, //IOB: If the PLL indicates a break in the phase lock,
- //it switches to its bypass mode and restarts the PLL phase-locking
- //sequence
- 10, //PLL multiply value; multiply 24 times
- 1 //Divide by 2 PLL divide value; it can be either PLL divide value
- //(when PLL is enabled), or Bypass-mode divide value
- //(PLL in bypass mode, if PLL multiply value is set to 1)
- };
- //---------Global data definition---------
- MCBSP_Config Configclockstop8= {
- MCBSP_SPCR1_RMK(
- MCBSP_SPCR1_DLB_OFF, /* DLB = 0 禁止数字回环*/
- MCBSP_SPCR1_RJUST_RZF, /* RJUST = 0 接收数据符号拓展和调整方式*/
- MCBSP_SPCR1_CLKSTP_NODELAY, /* 重要CLKSTP = 10 时钟停止模式 与CLKXP有关*/
- MCBSP_SPCR1_DXENA_NA, /* DXENA = 0 DX引脚延时使能*/
- MCBSP_SPCR1_ABIS_DISABLE, /* ABIS = 0 关闭abis*/
- MCBSP_SPCR1_RINTM_RRDY, /* RINTM = 0 接收中断模式*/
- 0, /* RSYNCER = 0 接收帧同步错误标志*/
- MCBSP_SPCR1_RRST_DISABLE /* RRST = 0 接收器复位*/
- ),
- MCBSP_SPCR2_RMK(
- MCBSP_SPCR2_FREE_NO, /* FREE = 0 */
- MCBSP_SPCR2_SOFT_NO, /* SOFT = 0 */
- MCBSP_SPCR2_FRST_RESET, /* FRST = 0 */
- MCBSP_SPCR2_GRST_RESET, /* GRST = 0 */
- MCBSP_SPCR2_XINTM_XRDY, /* XINTM = 0 */
- 0, /* XSYNCER = N/A */
- MCBSP_SPCR2_XRST_DISABLE /* XRST = 0 */
- ),
- MCBSP_RCR1_RMK(
- MCBSP_RCR1_RFRLEN1_OF(0), /* RFRLEN1 = 0 帧长为一字*/
- MCBSP_RCR1_RWDLEN1_8BIT /* RWDLEN1 = 0 每字为8bite*/
- ),
- MCBSP_RCR2_RMK(
- MCBSP_RCR2_RPHASE_SINGLE, /* RPHASE = 0 模式一:只与RCR1有关*/
- MCBSP_RCR2_RFRLEN2_OF(0), /* RFRLEN2 = 0 */
- MCBSP_RCR2_RWDLEN2_8BIT, /* RWDLEN2 = 0 */
- MCBSP_RCR2_RCOMPAND_MSB, /* RCOMPAND = 0 非压缩模式*/
- MCBSP_RCR2_RFIG_YES, /* 重要RFIG = 0 忽略错误的帧同步信号 */
- MCBSP_RCR2_RDATDLY_1BIT /* RDATDLY = 1 延时1bit*/
- ),
- MCBSP_XCR1_RMK(
- MCBSP_XCR1_XFRLEN1_OF(0), /* XFRLEN1 = 0 帧长为一字*/
- MCBSP_XCR1_XWDLEN1_8BIT /* XWDLEN1 = 0 每字8bite*/
-
- ),
- MCBSP_XCR2_RMK(
- MCBSP_XCR2_XPHASE_SINGLE, /* XPHASE = 0 模式一:帧长只与XCR1有关*/
- MCBSP_XCR2_XFRLEN2_OF(0), /* XFRLEN2 = 0 */
- MCBSP_XCR2_XWDLEN2_8BIT, /* XWDLEN2 = 0 */
- MCBSP_XCR2_XCOMPAND_MSB, /* XCOMPAND = 0 不拓展*/
- MCBSP_XCR2_XFIG_YES, /* 重要XFIG = 0 忽略错误的帧同步信号*/
- MCBSP_XCR2_XDATDLY_1BIT /* XDATDLY =1 发送数据延时1bit*/
- ),
- MCBSP_SRGR1_RMK(
- MCBSP_SRGR1_FWID_OF(0), /* 停止模式无效**重要FWID = 0 帧同步信号的脉宽周期数*/
- MCBSP_SRGR1_CLKGDV_OF(5) /* 停止模式无效**重要CLKGDV =9 CLKG时钟频率*/
- ),
- MCBSP_SRGR2_RMK(
- MCBSP_SRGR2_GSYNC_FREE, /* FREE = 0 内部时钟帧同步 */
- MCBSP_SRGR2_CLKSP_RISING, /* 重要CLKSP = 0 CLKS 引脚极性*/
- MCBSP_SRGR2_CLKSM_INTERNAL, /* 重要CLKSM = 1 cpu时钟*/
- MCBSP_SRGR2_FSGM_DXR2XSR, /* FSGM = 0 发送帧同步模式,如果FXSM=1,当DXR->XSR时,McBSP产生帧同步信号*/
- MCBSP_SRGR2_FPER_OF(10) /*重要 FPER = 0 FSG信号帧同步时钟周期数,应该是7*/
- ),
- MCBSP_MCR1_DEFAULT,
- MCBSP_MCR2_DEFAULT,
- MCBSP_PCR_RMK(
- MCBSP_PCR_IDLEEN_RESET, /* IDLEEN = 0 省电使能*/
- MCBSP_PCR_XIOEN_SP, /* XIOEN = 0 发送GPIO使能*/
- MCBSP_PCR_RIOEN_SP, /* RIOEN = 0 接收GPIO使能*/
- MCBSP_PCR_FSXM_INTERNAL, /* 重要FSXM = 1 发送帧同步模式,0由FSX引脚提供,1由McBSP提供*/
- MCBSP_PCR_FSRM_INTERNAL, /* 重要FSRM = 1 接收帧同步模式,0由FSR引脚提供,1由McBSP提供*/
- MCBSP_PCR_CLKXM_OUTPUT, /* 关键CLKXM = 1 主从模式*/
- MCBSP_PCR_CLKRM_INPUT, /* 关键CLKRM = 0 主从模式*/
- MCBSP_PCR_SCLKME_NO, /* SCLKME = 0 与CLKSM配合使用,cpu时钟模式*/
- 0, /* DXSTAT = N/A DX引脚上的电平*/
- 1, //MCBSP_PCR_FSXP_ACTIVELOW, /* 重要FSXP = 0 发送帧同步极性,0正极性,1负极性*/
- 1,//MCBSP_PCR_FSRP_ACTIVELOW, /* 重要FSRP = 0 接收帧同步极性,0正极性,1负极性*/
- MCBSP_PCR_CLKXP_RISING, /* 重要CLKXP = 0 发送时钟极性,0正极性,1负极性*/
- MCBSP_PCR_CLKRP_FALLING /* 重要CLKRP = 0 接收时钟极性,0正极性,CLKR引脚上的上升沿,产生CLKG的上升沿,1负极性*/
- ),
- MCBSP_RCERA_DEFAULT,
- MCBSP_RCERB_DEFAULT,
- MCBSP_RCERC_DEFAULT,
- MCBSP_RCERD_DEFAULT,
- MCBSP_RCERE_DEFAULT,
- MCBSP_RCERF_DEFAULT,
- MCBSP_RCERG_DEFAULT,
- MCBSP_RCERH_DEFAULT,
- MCBSP_XCERA_DEFAULT,
- MCBSP_XCERB_DEFAULT,
- MCBSP_XCERC_DEFAULT,
- MCBSP_XCERD_DEFAULT,
- MCBSP_XCERE_DEFAULT,
- MCBSP_XCERF_DEFAULT,
- MCBSP_XCERG_DEFAULT,
- MCBSP_XCERH_DEFAULT
- };
- /* Define a MCBSP_Handle object to be used with MCBSP_open function */
- MCBSP_Handle mhMcbsp;
- /*********************************************************************
- ** SPI定义与函数
- **********************************************************************/
-
- /*************长延时,待使用*********/
- void Delay(unsigned int s)
- {
- unsigned int i;
- for(i=0; i<s; i++);
- for(i=0; i<s; i++);
- }
- /******************************************************************************************
- 延时函数,依照时钟频率而定,待使用
- *****************************************************************************************/
- void inerDelay_us(unsigned char n)
- {
- for(;n>0;n--)
- _nop();
- }
- /****************************************************************************************************
- 函数:uint SPI_RW(uint uchar)
- 功能:SPI写时序 已修改
- ****************************************************************************************************/
- Uchar SPI_RW(MCBSP_Handle mh_Mcbsp,Uchar uchar_d)
- {
- Uchar get_data;
- while(!MCBSP_xrdy(mh_Mcbsp));
- MCBSP_write16(mh_Mcbsp,uchar_d); //写寄存器地址
- while(!MCBSP_rrdy(mh_Mcbsp));
- get_data=MCBSP_read16(mh_Mcbsp); //读寄存器中的值
- // printf("%d\n",get_data);
- return(get_data); // return read uchar
- }
- /****************************************************************************************************
- 函数:uchar SPI_Read(uchar reg) 已修改
- 功能:SPI读时序
- ****************************************************************************************************/
- Uchar SPI_Read(MCBSP_Handle mh_Mcbsp,Uchar reg)
- {
- Uchar reg_val;
- SPI_RW(mh_Mcbsp,reg); // 写寄存器地址.
- reg_val = SPI_RW(mh_Mcbsp,0); // 读该寄存器中的数据
- // printf("%d\n",reg_val);
- return(reg_val); // 返回寄存器的值
- }
- /****************************************************************************************************
- 功能:读写寄存器函数 已修改
- ****************************************************************************************************/
- Uchar SPI_RW_Reg(MCBSP_Handle mh_Mcbsp,Uchar reg, Uchar value)
- {
- Uchar status;
- status = SPI_RW(mh_Mcbsp,reg); // 写寄存器地址
- _nop(); _nop();
- SPI_RW(mh_Mcbsp,value); //写数据到该寄存器
- return(status); // 返回写入的数据
- }
- /*********************************************************************
- ** SPI定义与函数
- **********************************************************************/
- //---------main routine---------
- void main(void)
- {
- int a;
- /*初始化CSL库*/
- CSL_init();
- /*EMIF为全EMIF接口*/
- CHIP_RSET(XBSR,0x0a01);
- /*设置系统的运行速度为144MHz*/
- PLL_config(&myConfig);
- mhMcbsp = MCBSP_open(MCBSP_PORT0, MCBSP_OPEN_RESET);
- MCBSP_config(mhMcbsp, &Configclockstop8);
- MCBSP_start(mhMcbsp,
- MCBSP_RCV_START|MCBSP_XMIT_START|MCBSP_SRGR_START|MCBSP_SRGR_FRAMESYNC,
- 0x300u);
- Delay(100);
- while(1)
- {
- SPI_RW_Reg(mhMcbsp,0x80,1);
- a=SPI_Read(mhMcbsp,0x01);
- printf("%d",a);
- }
- }