搜索
bottom↓
回复: 0

TMS320F2812控制CH375,无法初始化

[复制链接]

出0入0汤圆

发表于 2012-5-18 20:50:41 | 显示全部楼层 |阅读模式
我使用GPIO控制,成功,现在想用XINTF总线控制,使用数据线D0~07连接CH375的D0~D7.使用XNMI,连接CH375中断,使用XZCS0AND1,作为CH375片选,XWE连接CH375的WR#,XRD连接CH375的RD#,A0由一个IO口控制,但是,始终没有办法初始化成功,测试通不过,程序如下:#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File
#include "DSP281x_Gpio.h"
#include "CH375INC.H"

#define CH375_A0     GpioDataRegs.GPADAT.bit.GPIOA9

#define USBDevice 0x02
#define USBBuffer_MaxLen 64
extern unsigned char USBBuffer[64];    //USB接收数据缓冲区
extern unsigned char USBRecFlag;       //USB
unsigned char USBData_Len=0;           //USB数据包长度
extern unsigned int * TFT_ADD1;
/****************************************************/
//函数描述: 短延迟
//写入参数: Delaynum,延迟时间:不详
//返回参数: 无
//描述:     延时
/****************************************************/
void SDelay(unsigned int DelayNum)
{
while(DelayNum--);
}
/****************************************************/
//函数描述:CH375处于无效状态
//写入参数:无
//返回参数:无
//描述:   读、写无效
/****************************************************/
void CH375Disable()
{
//add  
//   CH375_A0=0;
// * TFT_ADD1=0x00;
// CH375_CS=0;
// CH375_Read=1;
// CH375_Write=1;

}
/****************************************************/
//函数描述:CH375初始化
//写入参数:无
//返回参数:无
//描述:    初始化顺序:硬件复位,自测试(循环),写模式,开中断
/****************************************************/
void CH375Ini()
{
unsigned char i;
// CH375Disable();                 //CH375无效
CH375_WriteCmd(CMD_RESET_ALL)  //写入复位命令
for(i=0;i<150;i++)
{
SDelay(4500);                   //延时>30MS
}                                
while(!CH375SelfTest())        //测试CH375
{

}
CH375Write_Mode(USBDevice);     //设置USB驱动模式,为设备模式(0x02)

}
/****************************************************/
//函数描述:CH375自动检测
//写入参数:无
//返回参数:无
//描述:
//        测试数据:  0XAA,
//        返回数值:0   自测试失败
//                  1   自测试成功
/****************************************************/
unsigned char CH375SelfTest()
{
  unsigned char DataTest;
  CH375_WriteCmd(CMD_CHECK_EXIST); //写入测试命令
  SDelay(2000);                      //延时
  CH375_WriteData(0xAA);           //写入测试数据
  DataTest=CH375_ReadData();       //读出测试返回数据
  if(DataTest == 0x55)             //判断测试返回数据,
  {
     return 1;
  }
  else
  {
     return 0;
  }
}
/****************************************************/
//函数描述:CH375写命令函数
//写入参数:命令控制字
//返回参数:无
//描述:  
/****************************************************/
void CH375_WriteCmd(unsigned char CH375Command)
{


   CH375_A0 = 1;                                //A0为1的时候,写入命令,A0为0的时候,写入数据
* TFT_ADD1=CH375Command & 0xFF;
* TFT_ADD1=CH375Command & 0xFF;
* TFT_ADD1=CH375Command & 0xFF;
   SDelay(2000);

}
/****************************************************/
//函数描述:CH375写数据
//写入参数:数据
//返回参数:无
//描述:
// 2009.07.27 : V2.0: 从子程序中去除CH375Disable(),在连续写数据过程中不能将CS变高,移到写完整个数据块后在Disable
/****************************************************/
void CH375_WriteData(unsigned char CH375Data)
{

   CH375_A0 = 0;                                 //A0为1的时候,写入命令,A0为0的时候,写入数据
* TFT_ADD1=CH375Data & 0x00FF;
* TFT_ADD1=CH375Data & 0x00FF;
* TFT_ADD1=CH375Data & 0x00FF;
SDelay(2000);

}
/****************************************************/
//函数描述:CH375读数据
//写入参数:无
//返回参数:读出数据
//描述:
//2009.07.27   ,  V2.0  :在子程序中去出了CH375Disable()函数
//  原因:在批量数据读取时,CS线不能变低。将这部分功能移动到了数据读取完后再进行Disable  
/****************************************************/
unsigned char CH375_ReadData()
{
unsigned char USBData;

CH375_A0 = 0;                                 //A0为1的时候,读出中断标志,A0为0的时候,读出数据
USBData  = * TFT_ADD1 & 0x00FF;
USBData  = * TFT_ADD1 & 0x00FF;
USBData  = * TFT_ADD1 & 0x00FF;
SDelay(2000);

return USBData;
}
/****************************************************/
//函数描述:CH375写模式
//写入参数:模式数据
//返回参数:无
//描述:
//   写完命令自测试
/****************************************************/
void CH375Write_Mode(unsigned char CH375Mode)
{
//add
CH375_WriteCmd(CMD_SET_USB_MODE);
SDelay(20);
CH375_WriteData(CH375Mode);
while(CH375_ReadData()!=CMD_RET_SUCCESS)
{
}
//UartTrans("USB Set Mode OK!\n",17);
CH375Disable();
}
/****************************************************/
//函数描述:CH375缓冲区复位
//写入参数:无
//返回参数:无
//描述:
//   长度清零、缓冲区清零
/****************************************************/
void USBReset()
{
unsigned char Count_Temp;
for(Count_Temp=0;Count_Temp<USBBuffer_MaxLen;Count_Temp++)
{
  USBBuffer[Count_Temp]=0xAF;
}
USBData_Len = 0;
}
/****************************************************/
//函数描述:CH375发送数据
//写入参数:数据以及数据包的长度
//返回参数:无
//描述:
//   
/****************************************************/
void USBSend_Data(unsigned char *USBSendBuffer,unsigned char SendBuffer_Len)
{
//add
unsigned char  Count_Temp;
CH375_WriteCmd(CMD_WR_USB_DATA7);                       //向CH375的端点输出缓冲区或者端点2的上传缓冲区写入数据块
CH375_WriteData(SendBuffer_Len);                        //向CH375写入数据块长度
for(Count_Temp=0;Count_Temp<SendBuffer_Len;Count_Temp++)   //
{
  CH375_WriteData(*(USBSendBuffer+Count_Temp));          //写入数据
}
CH375Disable();                                                
}
/****************************************************/
//函数描述:CH375中断
//写入参数:无
//返回参数:无
//描述:
//   中断源:INT0
//   缓冲区:USBBuffer[]
//   长度  :USBData_Len ,Maxlen=64
/****************************************************/
void USBint()
{

unsigned char USBStatus;
unsigned char Count_Temp;
SDelay(200);
CH375_WriteCmd(CMD_GET_STATUS);                       //发送得到CH375状态的命令
SDelay(200);
USBStatus=CH375_ReadData();                           //读出CH375中断命令
switch(USBStatus)
{
  case USB_INT_EP1_OUT:                                /* USB端点1的OUT */
   {

   }
  break;

  case USB_INT_EP1_IN:                                 /* USB端点1的IN */                                 
       CH375_WriteCmd(CMD_UNLOCK_USB);
  break;

  case USB_INT_EP2_OUT:                                /* USB端点2的OUT */
   {
       CH375_WriteCmd(CMD_RD_USB_DATA);                //从当前USB中断的端点缓冲区中读取数据块
       USBData_Len=CH375_ReadData();                   //读取接收长度
       if(USBData_Len>64)
         {
          USBData_Len=64;
         }
        for(Count_Temp=0;Count_Temp< USBData_Len;Count_Temp++)  //接收数据块
         {
          USBBuffer[Count_Temp]=CH375_ReadData();
         }
        USBRecFlag=1;
        CH375Disable();
   }
   break;

   case USB_INT_EP2_IN:                                   /* USB端点2的IN */                              
        CH375_WriteCmd(CMD_UNLOCK_USB);
   break;

   case USB_INT_USB_SUSPEND:                                       
   break;

   case USB_INT_WAKE_UP:
   break;

   default:
   break;
}
}
还请各位大侠给予指导!谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 01:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表