按照例程跑程序,运行到s=CH376FileOpen( "/ECOA.TXT" )时,s的返回值为0xfa,这是为什么啊 我用模拟SPI接口的程序,CH376DiskMount( )返回值正确0x14,sdo兼做中断引脚
超时不能这么少。否则有时候会等不到中断直接退出就返回0XFA。还有DISK-MOUNT这个命令返回的中断状态是多少?是成功的中断状态吗?
没问题啊,CH376DiskMount( )返回值正确0x14,我看CH376DiskMount( )这个函数能返回正确的值,就又将防超时的值改回5000000了,但是改完以后程序停止在s=CH376FileOpen( "/ECOA.TXT" )这步了,连返回值都没有了
这个建议你查下中断引脚上面的配置是否有问题。还有可以用示波器看下发送OPEN的函数之后,中断引脚是否拉低?
我跟踪程序,发现运行到return( CH376_SPI_SDO ? FALSE : TRUE )这步的时候,因此一直再防计数超时的循环里等待,不能进入到中断检测状态,但是CH376_SPI_SDO的值是0啊,应该进入中断检测的啊
还是你中断那块有问题,模拟SPI方式在发送SET_SDO_INT(0BH)命令之后,设置CH376的SDO引脚在片选(SCS)无效时才兼做INT#引脚使用。你用示波器看一下是否符合要求?
#ifndef CH376_INT_WIRE #ifdef CH376_SPI_SDO xWriteCH376Cmd( CMD20_SET_SDO_INT ); /* 设置SPI的SDO引脚的中断方式 */ xWriteCH376Data( 0x16 ); xWriteCH376Data( 0x90 ); /* SDO引脚在SCS片选无效时兼做中断请求输出 */ xEndCH376Cmd( ); #endif #endif
初始化时,SDO引脚兼做中断请求输出应经设置过了,而且我用万用表测过了,spi_scs是高电平3.3v,而且初始化磁盘函数CH376DiskMount( )不也用到中断等待CH376SendCmdWaitInt( )了,为什么初始化磁盘函数能运行中断等待,CH376FileOpen( )就不能运行啊
我将376的中断引脚接到单片机上的I/O,运行程序示波器观察中断引脚的波形,是一个周期3.14s的矩形波,然后又断开中断引脚,使用spi_sdo兼做中断输出,示波器观察spi_sdo引脚的波形,虽然没有硬件中断引脚的波形好,但大概波形也是一个周期3.14s的矩形波,SCS片选为高,这是不是说明中断配置是没问题的,spi_sdo兼做中断也是可以的 Query376Interrupt( )函数返回一个0x02,怎么会出现0x02啊,应该不是1,就是0啊,一直不能进入 CH376GetIntStatus( ),求教
按照你说的中断应该没问题,Query376Interrupt如下: UINT8 Query376Interrupt( void ) { #ifdef CH376_INT_WIRE return( CH376_INT_WIRE ? FALSE : TRUE ); /* 如果连接了CH376的中断引脚则直接查询中断引脚 */ #else return( CH376_SPI_SDO ? FALSE : TRUE ); /* 如果未连接CH376的中断引脚则查询兼做中断输出的SDO引脚状态 */ #endif } 只有两种状态0和1,不会出现其他状态。
那这是什么情况啊?始化磁盘函数CH376DiskMount( )不也用到中断等待CH376SendCmdWaitInt( )了,为什么初始化磁盘函数CH376DiskMount( )能运行,CH376FileOpen( )就不能运行啊? 问题还可能出现在什么地方呢? 就算是 Query376Interrupt( )函数返回一个0x02,if语句也会判断其为真,从而进入中断获取状态函数的啊,为什么程序会卡在这里呢?