日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

10.25-sio

發(fā)布時間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 10.25-sio 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

10.25

任務目標 // 進度:

  • SIO,GPIO,WDT編程,編寫程序操作SIO,GPIO,WDT,需實現(xiàn)GPIO輸入輸出,電壓高低控制,看門狗需實現(xiàn)按分鐘或秒重啟系統(tǒng)。
  • watcom

工作結(jié)果:

SIO:NCT6106D

學習筆記:

GPIO

邏輯設(shè)備7 GPIO0 GPIO1 GPIO2 GPIO3 GPIO4 GPIO5 GPIO6 GPIO7
邏輯設(shè)備8
邏輯設(shè)備9

輸入模式:高阻抗;上拉;下拉
輸出模式:開漏輸出OD,推挽輸出PP,開集輸出OC

GPIO配置流程:

  • 配置Pin引腳功能,復用為GPIO
  • 選擇對應Logical Device并激活對應GPIO功能
  • 配置輸入輸出狀態(tài)
  • 設(shè)置輸出狀態(tài)(或讀取輸入狀態(tài))

  • WDT

    時間:看門狗計數(shù)器的位數(shù)和系統(tǒng)時鐘周期。

    喂狗:在這個時間內(nèi),清零計數(shù)器。否則就會重啟系統(tǒng)。

    NCT6106D
    WDT1計數(shù)器邏輯設(shè)備8,CR[F0h],位3
    超時設(shè)備邏輯設(shè)備8,CR[F1h],默認值4
    狀態(tài)位邏輯設(shè)備8,CR[F2h],位4
    WDT2counterLogical Device D,CR[E2h]
    the time-out valueLogical Device D,CR[E3h],bit[0]
    status bitLogical Device D,CR[E4h],bit[7]

    包括:8位可編程超時計數(shù)器,控制和狀態(tài)寄存器
    ? 8位最多計數(shù)256個

    WDT1:GPIO0, GPIO2, GPIO3, GPIO5, GPIO6, GPIO7

    計數(shù):寫0禁用計數(shù)器,寫非零數(shù),從此值開始向下計數(shù)。

    超時:GPIO0 bit[1] [5], GPIO2 bit[3] [7], GPIO3 bit[1] [5], GPIO5 bit[0] [4], GPIO6 bit[7], GPIO7bit[0]觸發(fā)100ms低脈沖。
    寫0清除狀態(tài)位,LRESET#或PWROK#信號中斷清除狀態(tài)位。

    訪問:

    1.間接訪問:寄存器2E/2F間接訪問,邏輯設(shè)備號和端口號

    // 2E2F寄存器訪問邏輯設(shè)備 #include<stdio.h> #include<stdlib.h> #include<dos.h> #include<conio.h>int main(int argc, char *argv[]){unsigned char value,value1,value2;unsigned char addr_port =0x2E;unsigned char data_port=0x2F;int time_out;if (argc==3){outp(addr_port, 0x87);outp(addr_port, 0x87);outp(addr_port, 0x07);outp(data_port, 0x08);outp(addr_port, 0x30);outp(data_port, 0x01);outp(addr_port, 0xF0); //countervalue=inp(data_port);value1= (value | 0x02);if (strcmp(argv[1],"-m")==0){value2=(value1 | 0x08);outp(data_port, value2);outp(addr_port, 0xF1); //time-outtime_out= atoi(argv[2]);outp(data_port, time_out);outp(addr_port, 0xF2); //status bitvalue=inp(data_port);valuel=(value | 0x40);outp(data_port, value1);outp(addr_port, 0xAA);}else if (strcmp(argy[1],"-s")==0){value2=(valuel & 0xF7); outp(data_port, value2);outp(addr_port, 0xF1); //time-outtime_out= atoi(argv[2]);outp(data_port, time_out);outp(addr_port, 0xF2); //status bit value=inp(data_port);value1=(value | 0x40);outp(data_port, value1);outp(addr_port, 0xAA);}else printf("Argument Error!\n");}elseprintf("Missing Argument!\n");return 0;}

    2.直接訪問:WDT寄存器表直接訪問,邏輯設(shè)備號

    // 訪問WDT寄存器IObase #define BITO 0x01 #define BIT1 0x02 #define BIT2 0x04 #define BIT3 0x08 #define BIT4 0x10 #define BIT5 0x20 #define BIT6 0x40 #define BIT7 0x80 #define NCT6106_CONFIG_INDEX 0x2E #define NCT6106_CONFIG_DATA 0x2F #define NCT6106_LDN_SEL_REGISTER 0x07 #define NCT6106_ACTIVATE_REGISTER 0x30 #define NCT6106_BASE1_HI_REGISTER 0x60 #define NCT6106_BASE1_LO_REGISTER 0x61 #define NCT6106_LDN_WDT 0x08 #define NCT6106_WDT_CONTROL_REGISTER 0xF5 #define NCT6106_WDT_TIMER_COUNTER_REGISTER 0xF6 #define NCT6106_CONFIG_MODE_ENTER_VALUE 0x87 #define NCT6106_CONFIG_MODE_EXIT_VALUE 0хAA #define WDT_ACTIVE 0x01 #define WDT_TIMER_MODE_MINIUTE 0x08 #define WDT_TIMER_MODE_SECOND 0x00typedefunsigned char UINT8; typedefunsigned int UINT16; UINT8 RetVar =0; UINT8 TimeValue; // 0<TimeValue<=OxFF UINT8 TimeMode; UINT16 WdtloBase; Outportb(NCT6106_CONFIG_INDEX, NCT6106_CONFIG_MODE_ENTER_VALUE);//Enter SIO config mode out 0x2E,0x87 Outportb(NCT6106_CONFIG_INDEX, NCT6106_CONFIG_MODE_ENTER_VALUE);//Enter SIO config mode out 0x2E,0x87 Outportb(NCT6106_CONFIG_INDEX, NCT6106_LDN_SEL_REGISTER);//Set LDN Select value out 0x2E, 0x07 Outportb(NCT6106_CONFIG_DATA, NCT6106_LDN_WDT);//Select WDT device out 0x2F,0x08 Outportb(NCT6106_CONFIG_INDEX, NCT6106_ACTIVATE_REGISTER);//Select WDT CRE30 out 0x2E,0x30 RetVar=Inportb(NCT6106_CONFIG_DATA);// Get the current value of LDN Ox8 CRE 0x30 in Ox2F,0x30 Outportb(NCT6106_CONFIG_DATA,(RetVar | WDT_ACTIVE));//Setup the BitO to enable WDT out Ox2F, (RetVar | WDT_ACTIVE) Outportb(NCT6106_CONFIG_INDEX, NCT6106_BASE1_HI REGISTER);//Select WDT CRE60 out 0x2E,0x60 WdtIoBase=(UINT16) Inportb(NCT6106_CONFIG_DATA);// Get the High Byte Value of 0x60 Outportb(NCT6106_CONFIG_INDEX, NCT6106_BASE1_LO_REGISTER);//Select WDT CRE61 out 0x2E,0x61 WdtIoBase=(UINT16) (WdtIoBase <<8) | Inportb(NCT6106_CONFIG_DATA);// Get the Low Byte Value of 0x61 // 配置WDT按分或秒計時: ReVar= Inportb(WdtIoBase + 0x05);//Get the current value of wdtmode register If (WDT_TIMER_MODE_SECOND == TimeMode)// Set the Time Mode bit and enable reset {Outportb(WdtIoBase + 0x05, (RetVar &(~BIT3) | BIT1); } /* If (WDT_TIMER_MODE_MINIUTE == TimeMode)// Set the Time Mode bit and enable reset {Outportb(WdtIoBase + 0x05, (RetVar | BIT3 | BIT1); } */ // 啟動/停止WDT Outportb(WdtIoBase + 0x06,TimeValue);//Set the time value to wdttim register Outportb(WdtIoBase + 0x06,0x00);//Write 00 to wdttim register to Clear the Value // 關(guān)閉SIO配置模式 Outportb(NCT6106_CONFIG_INDEX,NCT6106_CONFIG_MODE_EXIT_VALUE);//Exit SIO config Mode

    Open Watcom

    下載:https://dl.pconline.com.cn/download/1039481.html

    環(huán)境變量:WATCOM,INCLUDE,LIB

    SET WATCOM=C:\WATCOM
    SET INCLUDE=C:\WATCOM\H
    SET INCLUDE=C:\WATCOM\LIB286

    WATCOM=(OpenWatCOM)
    Path=%Path%;%WATCOM%\binw
    INCLUDE=%WATCOM%\H
    LIB=%WATCOM%\lib286;%WATCOM%\lib286\dos


    GPIO輸入與輸出設(shè)置

    SuperIo-Nct6106d

    Open Watcom上手之一:安裝篇

    編譯器介紹–OpenWatCOM

    如何安裝Open Watcom C / C ++開發(fā)系統(tǒng)

    心情感悟:

    解決問題時,直接搜索目的要比搜索步驟錯誤效率高得多。

    總結(jié)

    以上是生活随笔為你收集整理的10.25-sio的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。