4.5 Ұялы телефонды басқару командалары жүйесі. Порттан үзу мысалында аппараттық үзіктерді бағдарламалау ерекшелігі
GSM 07.07, GSM 05.07 стандарты ETSI (European Telecommunication Standards Institute) 15.03.2000 жылы қабылданды.
Олар модемді басқару кезінде пайдаланылатын АТ командаларынан және ұялы телефонның нп функцияларын орындау үшін пайдаланатын АТ командалардың кеңейтілген жиынынан тұрады.
Кеңейтілген АТ командаларын пайдалану кезінде көптеген командалардың үш орындау режимі бар:
«команда»=? – Егер Мобильді телефон осы пәрменді қолдаса, параметрлер тізімін береді. Әйтпесе қате енгізілген команда туралы хабарлама береді;
«команда» =[,,] – осы командамен қарастырылған параметрлердің мәнін анықтайды. Кейбір командалар үшін осы режимде пәрменді орындау мүмкін емес;
«команда»? - СОМ портына команда параметрлерінің мәнін шығарады.
COM портын инициализациялау
СОМ портты UART микросхемасы басқарады. Сондықтан алдымен UART-ты іске қосамыз. Желі жағдайы, модем жағдайы және деректер регистрлерін тастаймыз. Бұл регистрлердің мәндерін қарапайым оқу арқылы қол жеткізіледі:
желі регистрі
mov dx, LSR; LSR-желі күй регистрі мекенжайы
in al,dx
jmp $ +2; кідіріс
; модем жағдайы регистрін тастаймыз
mov dx, MSR; мұнда MSR - модемнің жай-күйі тіркелімінің мекенжайы
in al,dx
jmp $ +2; кідіріс
; деректер регистрі
mov dx, DAT; мұнда DAT-деректер тіркелімінің мекенжайы
in al,dx
jmp $ +2; кідіріс
Бұл регистрлерді одан әрі басқа бағдарламалардың жұмысынан қалуы мүмкін ескі мәндерге кедергі келтірмеу үшін тастау қажет.
Біз UART регистрлерін жойғаннан кейін, COM портының инициализациясына кірісуге болады. Инициалдау кезінде деректер пішімі - сөздің ұзындығы, табан биттерінің саны, алмасу жылдамдығы мен анықтығы бойынша бақылаудың болуы беріледі.
Деректер алмасу жылдамдығын тапсыру үшін деректер регистрі мен үзіктерді басқару регистрін тактілік генератордың жиілік бөлгішінің мәнін енгізу режиміне ауыстыру қажет. Бұл режим желіні басқару тіркелімінің (LCR):
// деректер регистрі мен регистр аударамыз
// енгізу режиміне үзуді басқару
// тактілік генератор жиілігін бөлгіштің мәні
ctl = inp (LCR); // LCR - басқарма тіркелімінің мекенжайы
// регистрдің аға битін орнатамыз
outp(LCR_N, ctl | 0x80);
// жиілік бөлгішінің мәнін есептейміз
// (ауысымды baud алмасу жылдамдығын анықтайды,
// біз орнатқымыз келеді)
switch(baud) {
case 110: div = 1040; break;
case 150: div = 768; break;
case 300: div = 384; break;
case 600: div = 192; break;
case 1200: div = 96; break;
case 2400: div = 48; break;
case 4800: div = 24; break;
case 9600: div = 12; break;
case 19200: div = 6; break;
case 38400: div = 3; break;
case 57600: div = 2; break;
case 115200: div =1; break;
default: return(-1); break;
}
Достарыңызбен бөлісу: |