求救,ch375初始化不成功

我用ATmageAVR4.4 編寫的代碼: (1)ch375b初始化不成功? (2)用什么pc軟件向ch375寫數(shù)據(jù)? (3)用bus hound檢測發(fā)送的數(shù)據(jù)行嗎? 謝謝,各位大師了

#include "pctoch375.h" #include #include "pctoch375ExtINT.h" #include "CH375INC.H"

#define A0 PD5 //定義引腳 #define RD PG1 #define WR PG0 #define CS PD7 #define NOP asm("nop") //定義一個空操作語句

///////////////////////////////////////////////////////////////////////////// //pctoch375

static void io_init(void) { //{{WIZARD_MAP(General) //}}WIZARD_MAP(General)

//{{WIZARD_MAP(I/O Ports) // PortA PORTA = 0x0; DDRA = 0xFF; // PortB PORTB = 0x0; DDRB = 0x0; // PortC PORTC = 0x0; DDRC = 0x0; // PortD PORTD = 0x80; DDRD = 0x80; // PortE PORTE = 0x0; DDRE = 0x0; // PortF PORTF = 0x0; DDRF = 0x0; // PortG PORTG = 0x03; DDRG = 0x0F; //}}WIZARD_MAP(I/O Ports)

//{{WIZARD_MAP(Watchdog) // Watchdog Disabled wdt_disable(); //}}WIZARD_MAP(Watchdog)

//{{WIZARD_MAP(Analog Comparator) // Analog Comparator Disabled ACSR = 0x80; //}}WIZARD_MAP(Analog Comparator) }

/* 延時1微秒*/ void mDelay1uS(void) { char i; for ( i = 10; i != 0; i -- ); }

void mDelay40mS(void) { char i,j; for ( i = 400; i != 0; i-- ) for ( j = 1000; j != 0; j-- ); }

/******************************************* 向CH375寫數(shù)據(jù)函數(shù) ********************************************/ void WR_DAT_ch375(unsigned char dat) { cbi(PORTD,PD7); cbi(PORTD,PD5); //A0 = Low 選擇輸出是數(shù)據(jù) cbi(PORTG,PG0); //WR = Low 選擇寫 DDRA = 0xFF; //將PORTA置成輸出 NOP; NOP; outp(dat,PORTA); mDelay1uS( ); mDelay1uS( ); }

/******************************************* 寫命令函數(shù) ********************************************/ void WR_CMD_ch375(unsigned char cmd) { cbi(PORTD,PD7); cbi(PORTG,PG0); //WR = Low 選擇寫 sbi(PORTD,PD5); //A0 = High 寫命令 DDRA = 0xFF; //將PORTA置成輸出 NOP; NOP; //兩個空操作 outp(cmd,PORTA); mDelay1uS( ); mDelay1uS( ); }

/******************************************* 讀CH375數(shù)據(jù)函數(shù) ********************************************/ unsigned char RD_data_ch375(void) { unsigned char data; cbi(PORTD,PD7); sbi(PORTD,PD5); cbi(PORTG,PG1); //RD = Low 選擇讀 cbi(PORTD,PD5); //A0 = Low 選擇輸出是數(shù)據(jù) DDRA = 0x00; NOP; NOP; data = inp(PINA); //讀端口數(shù)據(jù)并返回 return data; }

/* CH375初始化子程序 */ void CH375_Init(void) { unsigned char i; /* 測試CH375是否正常工作,可選操作,通常不需要 */ cbi(PORTD,PD7); WR_CMD_ch375( CMD_RESET_ALL ); mDelay40mS(); WR_CMD_ch375( CMD_CHECK_EXIST ); /* 測試CH375是否正常工作 */ WR_DAT_ch375( 0x55 ); /* 寫入測試數(shù)據(jù) */ i = ~(0x55); /* 返回數(shù)據(jù)應該是測試數(shù)據(jù)取反 */ if ( RD_data_ch375( ) != i ) /* CH375不正常 */ { sbi(PORTG,PG3); /*測試信號*/ for ( i=80; i!=0; i-- ) { WR_CMD_ch375( CMD_RESET_ALL ); /* 多次重復發(fā)命令,執(zhí)行硬件復位 */ RD_data_ch375( ); } WR_CMD_ch375(0); mDelay40mS(); } else sbi(PORTG,PG4); /*測試信號*/ WR_CMD_ch375( CMD_SET_USB_MODE );/* 設(shè)置USB工作模式, 必要操作 */ WR_DAT_ch375( 2 ); /* 設(shè)置為使用內(nèi)置固件的USB設(shè)備方式 */ for ( i=100; i!=0; i-- ) { /* 等待操作成功,通常需要等待10uS-20uS */ if ( RD_data_ch375( ) == CMD_RET_SUCCESS ) break; } }

/* CH375中斷服務程序*/ void Interrupt375(void) { unsigned char InterruptStatus; unsigned char i,length; unsigned char data_buffer[ 64 ]; WR_CMD_ch375( CMD_GET_STATUS ); /* 獲取中斷狀態(tài)并取消中斷請求 */ InterruptStatus=RD_data_ch375( ); /* 獲取中斷狀態(tài) */ sbi(PORTG,PG2); /*測試信號正常*/ switch (InterruptStatus) { /* 分析中斷狀態(tài)處理 */ case USB_INT_EP2_OUT: { /* 批量端點下傳成功 */ WR_CMD_ch375( CMD_RD_USB_DATA ); /* 從當前USB中斷的端點緩沖區(qū)讀取數(shù)據(jù)塊,并釋放緩沖區(qū) */ length=RD_data_ch375( ); /* 首先讀取后續(xù)數(shù)據(jù)長度 */ for ( i=0; i data_buffer[ i ]=RD_data_ch375( ); /* 接收數(shù)據(jù)包 */ /* 測試數(shù)據(jù)正確性,將接收到的命令包數(shù)據(jù)取反后返回給PC機 */ WR_CMD_ch375(CMD_WR_USB_DATA7); /* 向USB端點2的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊 */ WR_DAT_ch375(length); /* 首先寫入后續(xù)數(shù)據(jù)長度,回傳剛接收到的數(shù)據(jù)長度 */ for ( i=0; i WR_DAT_ch375( ~data_buffer[ i ] ); /* 數(shù)據(jù)取反后返回,由計算機應用程序測試數(shù)據(jù)是否正確 */ break; } case USB_INT_EP2_IN: { /* 批量數(shù)據(jù)發(fā)送成功 */ WR_CMD_ch375( CMD_UNLOCK_USB ); /* 釋放當前USB緩沖區(qū) */ break; } default: { /* 其它中斷,未用到,解鎖后退出即可 */ WR_CMD_ch375( CMD_UNLOCK_USB ); /* 釋放當前USB緩沖區(qū) */ break; } } }

int main(void) { //{{WIZARD_MAP(Initialization) io_init(); extint_init(); //}}WIZARD_MAP(Initialization) // TODO: Add extra initialization here //{{WIZARD_MAP(Global interrupt) //sei(); //}}WIZARD_MAP(Global interrupt) CH375_Init( ); /* 初始化CH375 */ sei(); /* 允許中斷 */ while ( 1 ); /* 以下指令開始工作循環(huán),等待PC機命令進行操作 */ { // TODO: Add your code here if(flag==1) //中斷flag標志 { Interrupt375(); flag=0; } } } [b]文字[/b]

sbi(PORTG,PG3)-------------是看程序進程的,初始化始終不成功,求救

第一步不成功,下面兩個是無法完成的,主要檢查一下時序, void WR_CMD_ch375(unsigned char cmd) { cbi(PORTD,PD7); cbi(PORTG,PG0); //WR = Low 選擇寫 sbi(PORTD,PD5); //A0 = High 寫命令 DDRA = 0xFF; //將PORTA置成輸出 NOP; NOP; //兩個空操作 outp(cmd,PORTA); mDelay1uS( ); mDelay1uS( ); } 這種寫的方式是不正確的.你仔細看一下,正確的方式應該是先把數(shù)據(jù)寫到端口上outp(cmd,PORTA); 然后在設(shè)置方向,然后在cbi(PORTG,PG0); 你的寫法很有可能會采樣不到你要寫的數(shù)據(jù)


你的時序未按手冊要求,試試下面的 /******************************************* 向CH375寫數(shù)據(jù)函數(shù) ********************************************/ void WR_DAT_ch375(unsigned char dat) { outp(dat,PORTA); DDRA = 0xFF; /* 輸出 */ cbi(PORTD,PD5); /* A0 = 0 */ cbi(PORTD,PD7); /* CS = 0 */ cbi(PORTG,PG0); /* WR = 0 */ NOP;NOP; /* 至少60nS */ sbi(PORTG,PG0); sbi(PORTD,PD7); DDRA = 0x00; /* 輸入 */ DelayuS( ); /* 延時0.6uS */ }

/******************************************* 寫命令函數(shù) ********************************************/ void WR_CMD_ch375(unsigned char cmd) { outp(dat,PORTA); DDRA = 0xFF; /* 輸出 */ sbi(PORTD,PD5); /* A0 = 1 */ cbi(PORTD,PD7); /* CS = 0 */ cbi(PORTG,PG0); /* WR = 0 */ NOP;NOP; /* 至少60nS */ sbi(PORTG,PG0); sbi(PORTD,PD7); cbi(PORTD,PD5); /* A0 = 0 */ DDRA = 0x00; /* 輸入 */ DelayuS( ); /* 延時1.5uS */ }

/******************************************* 讀CH375數(shù)據(jù)函數(shù) ********************************************/ unsigned char RD_data_ch375(void) { unsigned char data;

DDRA = 0x00; /* 輸入 */ cbi(PORTD,PD5); /* A0 = 0 */ cbi(PORTD,PD7); /* CS = 0 */ cbi(PORTG,PG1); /* RD = 0 */ NOP;NOP; /* 至少60nS */ data = inp(PINA); /* 讀端口數(shù)據(jù)并返回 */ sbi(PORTG,PG1); /* RD = 1 */ sbi(PORTD,PD7); /* CS = 1 */ DelayuS( ); /* 延時0.6uS */ return data; }


先謝謝您,我按照你的程序改過了,但是還是初始化不成功!! (1)我查過硬件連接沒問題 (2)ch375并口管腳輸出0xFF,不知道什么問題 急盼您的答復


(1)檢查各個信號腳的配置是否正確 (2)循環(huán)調(diào)用寫數(shù)據(jù)函數(shù),看看個信號腳的信號是否正確


初始化管腳配置: // PortA PORTA = 0x0; DDRA = 0xFF; // PortB PORTB = 0x0; DDRB = 0x0; // PortC PORTC = 0x0; DDRC = 0x0; // PortD PORTD = 0xa0;-------CS,A0=1 DDRD = 0xa0; // PortG PORTG = 0x03;--------WR,DR=1 DDRG = 0x0F 我調(diào)用了WR_DAT_ch375(0x55),看ch375的管腳電平,數(shù)據(jù)為0xFF,其余程序沒寫 還有個問題,ch375不自檢,直接做 WR_CMD_ch375( CMD_SET_USB_MODE );/* 設(shè)置USB工作模式, 必要操作 */ WR_DAT_ch375( 2 ); ...... 用usb數(shù)據(jù)線連電腦發(fā)現(xiàn)硬件,要求安裝驅(qū)動,怎么回事??


(1)如果是循環(huán)掉用的,那么數(shù)據(jù)線上肯定不會始終是0xff,另外還要檢測CS,WR,AO (2)那么表示模式設(shè)置成功了,直接安裝驅(qū)動即可,當然事先預安裝一下CH372DRV.EXE


直接做 WR_CMD_ch375( CMD_SET_USB_MODE );/* 設(shè)置USB工作模式, 必要操作 */ WR_DAT_ch375( 2 ); ......... 有問題嗎?老是自檢不成功,驅(qū)動用CH372DRV.EXE,可以嗎? 我不調(diào)用以下函數(shù): /* 測試CH375是否正常工作,可選操作,通常不需要 */ cbi(PORTD,PD7); WR_CMD_ch375( CMD_RESET_ALL ); mDelay40mS(); WR_CMD_ch375( CMD_CHECK_EXIST ); /* 測試CH375是否正常工作 */ WR_DAT_ch375( 0x55 ); /* 寫入測試數(shù)據(jù) */ i = ~(0x55); /* 返回數(shù)據(jù)應該是測試數(shù)據(jù)取反 */ if ( RD_data_ch375( ) != i ) /* CH375不正常 */ { sbi(PORTG,PG3); /*測試信號*/ for ( i=80; i!=0; i-- ) { WR_CMD_ch375( CMD_RESET_ALL ); /* 多次重復發(fā)命令,執(zhí)行硬件復位 */ RD_data_ch375( ); } WR_CMD_ch375(0); mDelay40mS(); }


ch375初始化不成功,那是不是INT#就一直是高電平??沒有中斷了啊? 不用 WR_CMD_ch375( CMD_CHECK_EXIST ); /* 測試CH375是否正常工作 */ WR_DAT_ch375( 0x55 ); /* 寫入測試數(shù)據(jù) */ i = ~(0x55); /* 返回數(shù)據(jù)應該是測試數(shù)據(jù)取反 */ if ( RD_data_ch375( ) != i ) /* CH375不正常 */ 程序會有問題嗎?模式設(shè)置正常的,只是沒中斷,單片機不能接受PC數(shù)據(jù),郁悶啊? 希望高手解答啊?。?!


ch375并口管腳輸出0xFF,上電就是0xFF,25腳、26腳電平正常,ch375自測不成功


先做測試命令,看測試命令是否通過,如果模式2設(shè)置成功,計算機會提示安裝驅(qū)動.ch375初始化和中斷沒有關(guān)系


既然問題出在讀寫子函數(shù),那很簡單,你去測試一下就可以,現(xiàn)在循環(huán)寫一個數(shù)據(jù),然后用示波器探測一下各個引腳是否正常,用雙蹤示波器.這樣就可以探測出來什么信號不對了,還有你做測試命令返回的值是多少?


是用 WR_CMD_ch375( CMD_CHECK_EXIST ); /* 測試CH375是否正常工作 */ WR_DAT_ch375( 0x55 ); /* 寫入測試數(shù)據(jù) */ i = ~(0x55); /* 返回數(shù)據(jù)應該是測試數(shù)據(jù)取反 */ if ( RD_data_ch375( ) != i ) /* CH375不正常 */ cbi(PORC,PC0);------------測試點 ....這個函數(shù)嗎? 發(fā)現(xiàn)PC0置低電平了,表明還是不成功,硬件沒問題 謝謝,我很急啊


測試返回0xFF,還有我只有萬用表,我只能測試管腳電平

我條過測試,直接設(shè)置模式,是可以的,那不是說明我的讀寫函數(shù)沒問題啊,請指教,謝謝


請問一下:你們要求的1.5uS和0.6uS是不是一定要的,我用的是7.328M的晶鎮(zhèn),時間上可能不是很準,有要緊嗎? 是不是這個導致"測試CH375是不正常工作"??? 謝謝


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频