• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 手機與無線通信 > 設計應用 > 基于EPM7128設計的數據合并轉換器

    基于EPM7128設計的數據合并轉換器

    作者: 時間:2011-05-17 來源:網絡 收藏

    2.3 幀長計數器的部分

    兩個74161長1/64的分頻器,也叫幀長計數器,此計數器的時鐘為FRAMECLK,計數器的輸出最高兩位邏輯與為中斷INT7,把與門輸出與次高位邏輯異或為中斷INT5。這樣,INT7比INT5在時序上早半個周期。開始復位后,INT7脈沖首先產生,觸發中斷,COU中斷后在服務程序中把64個字節寫到FIFO,然后屏蔽中斷INT7,半個周期后,FIFO中還剩32個字節(因此FIFO的讀脈沖和FRAMECLK反相同頻)。然后中斷INT5到來,CPU響應后,再寫64個字節給FIFO,使FIFO中一直保持有數據的狀態(可避免讀FIFO正好落在兩個寫FIFO之間,FIFO因無數據而讀死)。這樣,每當中斷INT5到來,都寫64字節給FIFO,周而復始,所以把64字節定為幀長。

    3 軟件

    outp(0x303,0x36);//方式3,方波。//

    outp(0x300,0x50);//timer0,分頻比為80。//

    outp(0x300,0x00);

    outp(0x303,0x74);//方式2,脈沖。//

    outp(0x301,0x08);//timer1,分頻比為8。//

    outp(0x301,0x00);

    數據

    if((com1_count%24)= =0) ;//串行口1的24字節數據放在數組Frame的4~27的位置。//

    {

    com_buf1[com1_count++]=db1; //串行口1接收數據//

    int Original_Counter;

    Original_Counter=com1_count/24;

    memcpy(Frame[Original_Counter-1]+4,com_buf1[com1_count-24],24);

    }

    if((com2_count%24)= =0); //串行口2的24字節數據放在數組Frame的28~51的位置。//

    {

    com_buf2[com2_count++]=db2 ;//串行口2接收數據//

    int Original_Counter;

    Original_Counter=com2_count/24;

    Memcpy(Frame[Original_Counter-1]+28,com_buf2[com2_count-24],24) ;//后的數據放在Frame數組中。//

    寫FIFO:

    void Send_To_Fifo(int number); //Send_To_Fifo函數為中斷服務程序的一部分。//

    {

    for(int i=0;i64;i++)

    outp(WFIFO,Frame[number][i]); //數組送給FIFO,實現數據//


    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 巧家县| 衢州市| 遂平县| 高台县| 昌邑市| 前郭尔| 奎屯市| 霍州市| 文安县| 息烽县| 正镶白旗| 泰来县| 新平| 宣威市| 吴江市| 曲阳县| 南陵县| 西和县| 安义县| 海丰县| 义乌市| 大丰市| 琼海市| 平顺县| 马边| 自贡市| 德钦县| 宝兴县| 青田县| 襄汾县| 冷水江市| 石嘴山市| 高雄县| 阿坝| 山东省| 湖北省| 色达县| 和田县| 平阳县| 平阴县| 呼和浩特市|