Вы находитесь на странице: 1из 4

ÌÊ è ÄÑÏ

ARM-ÌÈÊÐÎÊÎÍÒÐÎËËÅÐÛ ATMEL:
ÏÐÀÊÒÈ×ÅÑÊÈÅ ÀÑÏÅÊÒÛ ÏÐÈÌÅÍÅÍÈß
×àñòü 1. ARM7
Íèêîëàé Êîðîëåâ, ðóêîâîäèòåëü èíæåíåðíîãî öåíòðà, ÎÎÎ «ÀÐÃÓÑÑÎÔÒ Êîìïàíè»
Àíòîí Øàáûíèí, èíæåíåð, ÎÎÎ «ÀÐÃÓÑÑÎÔÒ Êîìïàíè»

Êîðïîðàöèÿ ATMEL âûïóñêàåò øèðîêóþ ëèíåéêó ìèêðîêîíòðîë- Â öåëÿõ ïîâûøåíèÿ ïðîèçâîäè-


ëåðîâ íà áàçå ÿäåð ARM7 è ARM9. Ìèêðîêîíòðîëëåðû îòëè÷àþòñÿ òåëüíîñòè ìèêðîêîíòðîëëåðà ìíîãèå
íàáîðîì ïåðèôåðèéíûõ ìîäóëåé è, ñîîòâåòñòâåííî, òèïîì êîðïóñà. ïåðèôåðèéíûå ìîäóëè îñíàùåíû
ñîáñòâåííûìè êîíòðîëëåðàìè ïðÿ-
Íàëè÷èå ðàñøèðåííîé ïåðèôåðèè ñóùåñòâåííî óâåëè÷èâàåò âîçìîæ-
ìîãî äîñòóïà ê ïàìÿòè (ÏÄÏ) (ñì.
íîñòè ìèêðîêîíòðîëëåðîâ, íî, ñ äðóãîé ñòîðîíû, çàñòàâëÿåò îáðà- ðèñ. 2). Ñëåäóåò îòìåòèòü, ÷òî âî
ùàòü ïîâûøåííîå âíèìàíèå íà ïðîöåññ èíèöèàëèçàöèè êðèñòàëëà, à âðåìÿ ðàáîòû êîíòðîëëåðà ÏÄÏ íå
òàêæå ãðàìîòíîå èñïîëüçîâàíèå îòëàäî÷íûõ ñðåäñòâ.  ïåðâîé ÷àñòè ïðîèñõîäèò áëîêèðîâàíèÿ äîñòóïà
ñòàòüè ðàññìîòðåíà ðàáîòà ñ êîíòðîëëåðîì íà ÿäðå ARM7. ÿäðà êîíòðîëëåðà ê ñèñòåìíîé øèíå
è îïåðàòèâíîé ïàìÿòè.
ÂÂÅÄÅÍÈÅ AT91SAM7S. Ýòî ñåìåéñòâî ìîæíî Äëÿ îáåñïå÷åíèÿ ðàáîòû ïåðè-
Èíòåðôåéñû ìèêðîêîíòðîëëå- ñ÷èòàòü áàçîâûì, ïîòîìó ÷òî îñòàëü- ôåðèéíîãî ìîäóëÿ â äóïëåêñíîì
ðà õàðàêòåðèçóþò âîçìîæíîñòè åãî íûå ñåìåéñòâà ñîäåðæàò òîò æå íàáîð ðåæèìå êîíòðîëëëåð ñîäåðæèò äâà
«îáùåíèÿ» ñ âíåøíèì ìèðîì. Ïîýòîìó ïåðèôåðèéíûõ ìîäóëåé, íî äîïîëíå- íàáîðà ðåãèñòðîâ – ïðèåìíûé è
ðàçðàáîò÷èê, âûáèðàÿ êîíòðîëëåð äëÿ íû íåêîòîðûìè èíòåðôåéñàìè, íàïðè- ïåðåäàþùèé.  ñîñòàâ êîíòðîëëåðà
íîâîãî ïðîåêòà, âíèìàòåëüíî èçó÷àåò ìåð, CAN èëè Ethernet. ÏÄÏ âõîäèò ñ÷åò÷èê àäðåñà, êîòî-
íå òîëüêî âîçìîæíîñòè ÿäðà, íî è
íàëè÷èå òîãî èëè èíîãî òèïà èíòåð-
ôåéñà íà êðèñòàëëå.
 òàáëèöå 1 ïðåäñòàâëåíû òèïû
èíòåðôåéñîâ, êîòîðûìè îñíàùåíû
êîíòðîëëåðû ñåðèè AT91SAM7 è
AT91SAM9. Èç òàáëèöû âèäíî, ÷òî
ïðàêòè÷åñêè âñå êîíòðîëëåðû SAM7
èìåþò âñòðîåííóþ ôëýø-ïàìÿòü, à
êîíòðîëëåðû SAM9 îòëè÷àåò íàëè-
÷èå âíåøíåé øèíû äàííûõ, ïðè÷åì
ìèêðîñõåìà AT91SAM9263 ñîäåðæèò
äâå âíåøíèõ øèíû, ÷òî åñòåñòâåííî
âëå÷åò çà ñîáîé óâåëè÷åíèå ÷èñëà
âûâîäîâ êîðïóñà.
Êîðïîðàöèÿ ATMEL, ó÷èòûâàÿ
ïîòðåáíîñòè ðûíêà, ðàçðàáàòûâàåò
ìèêðîñõåìû ñ ðàñøèðåííîé ïåðèôå-
ðèåé, áîëåå òîãî, ïåðèôåðèÿ ìèêðî-
êîíòðîëëåðà ìîæåò áûòü «íà ëåòó»
ïåðåèíèöèàëèçèðîâàíà. Íàïðèìåð,
Ðèñ. 1. Îñíîâíûå õàðàêòåðèñòèêè êîíòðîëëåðîâ ñåìåéñòâà SAM7
ìîäóëü USART ìîæíî çàïðîãðàììè-
ðîâàòü íà ðàáîòó â îáû÷íîì àñèí-
õðîííîì ðåæèìå ñ èñïîëüçîâàíèåì Òàáëèöà 1 Èíòåðôåéñû êîíòðîëëåðîâ SAM7 è SAM9
òîëüêî ëèíèé TXD è RXD, à ìîæíî USB- Ôëýø- Âíåøíÿÿ
èíèöèàëèçèðîâàòü åãî êàê «ïîëíî- CAN Ethernet USB-õîñò Êàìåðà ÆÊÈ
óñòðîéñòâî ïàìÿòü øèíà (EBI)
öåííûé» 9-ñèãíàëüíûé èíòåðôåéñ SAM7S  
RS-232 èëè êàê ñèíõðîííûé èíòåð- SAM7A3   
ôåéñ ñî ñêîðîñòüþ îáìåíà äî 25 Ìáèò/ SAM7X    
ñ. Åñëè æå èñïîëüçóåòñÿ ïðîòîêîë
SAM7SE   
RS-485 â ïîëóäóïëåêñíîì ðåæèìå,
SAM7L  
ìîæíî çàïðîãðàììèðîâàòü äîïîë-
íèòåëüíûé âûâîä ìèêðîñõåìû äëÿ SAM9260     
àïïàðàòíîãî óïðàâëåíèÿ íàïðàâëåíè- SAM9XE      
åì ïåðåäà÷è äðàéâåðà èíòåðôåéñà. SAM9RL 480 Ìáèò/ñ  
Íà ðèñóíêå 1 ïðåäñòàâëåíû îñíîâ- SAM9261    
íûå ïàðàìåòðû ìèêðîñõåì ñåìåéñòâà SAM9263     (x2)   

«Ýëåêòðîííûå êîìïîíåíòû» ¹7, 2007


1
ÌÊ è ÄÑÏ

âåðñèÿ IAR Kickstart, îãðàíè÷åííàÿ


íà ìàêñèìàëüíóþ äëèíó âûõîäíîãî
áèíàðíîãî ôàéëà – äî 32 Êáàéò.
 òàêîå îãðàíè÷åíèå ïîìåùàþòñÿ
íåáîëüøèå ïîëüçîâàòåëüñêèå ïðîãðàì-
ìû, àêòèâíî èñïîëüçóþùèå ñòàíäàðò-
íûå áèáëèîòåêè ÿçûêà C/C++. Ïàêåò
IAR Kickstart ïðåäëàãàåò ñîâåðøåííî
ïðèâû÷íóþ IDE ñî ñòàâøèì êëàññè-
÷åñêèì èíòåðôåéñîì. Âïîëíå ïðèëè÷-
íûé ðåäàêòîð, õîðîøèå âîçìîæíîñòè
ïî îòëàäêå ñ èñïîëüçîâàíèåì JTAG-
ýìóëÿòîðà: ïðîñìîòð è ïðàâêà ðåãèñ-
òðîâ, ïàìÿòè, watch, èñïîëüçîâàíèå
óñëîâíûõ òî÷åê îñòàíîâîê. Åñòü ïîä-
äåðæêà êàê ýìóëÿòîðîâ îò Segger, òàê
è áîëåå äåøåâûõ, òèïà Wiggler, ÷åðåç
âíåøíèé RDI-ñåðâåð. Ñëîâîì – âñå,
Ðèñ. 2. Ñòðóêòóðà êîíòðîëëåðà ÏÄÏ ÷òî íóæíî äëÿ ïîëíîöåííîé îòëàä-
êè ïîëüçîâàòåëüñêîé ïðîãðàììû.
Îïòèìèçèðóþùèé êîìïèëÿòîð IAR
ðûé ïðîãðàììèðóåòñÿ íà ïðèåì/ ÑÐÅÄÑÒÂÀ ÐÀÇÐÀÁÎÒÊÈ ïîçâîëÿåò ïîâûñèòü ñêîðîñòü âûïîë-
ïåðåäà÷ó ïàêåòà äàííûõ. Åñëè äëèíà íåíèÿ êîäà èíîãäà â íåñêîëüêî ðàç.
ïàêåòà ïðåâûøàåò ðàçðÿäíîñòü ñ÷åò- Ïðîãðàììíûå ñðåäñòâà
÷èêà àäðåñà, íåîáõîäèìà ïîâòîðíàÿ Íà ñåãîäÿøíèé äåíü âñå ïðîãðàì- GCC
èíèöèàëèçàöèÿ, ÷òî ìîæåò ïðèâåñòè ìíûå ñðåäñòâà ðàçðàáîòêè ìîæíî Àëüòåðíàòèâîé êîììåð÷åñêîé ñðåäå
ê íåæåëàòåëüíîé ïàóçå â âûõîäíîì ðàçäåëèòü íà ïëàòíûå è áåñïëàòíûå îò IAR ÿâëÿåòñÿ îòêðûòàÿ è áåñïëàò-
ïîòîêå äàííûõ è ê ïîòåðå äàííûõ ïðîäóêòû ñ îòêðûòûì êîäîì (ñì. íàÿ ñðåäà ðàçðàáîòêè íà ïëàòôîðìå
âî âõîäíîì ïîòîêå. Äëÿ ïðåäîòâðà- òàáë. 2). Ôóíêöèîíàëüíûå âîçìîæ- Eclipse è êîìïèëÿòîðå GNU GCC.
ùåíèÿ òàêîé ñèòóàöèè êîíòðîëëëåð íîñòè ó âñåõ ïîëíîöåííûõ ïðîäóêòîâ Îò IAR îíà îòëè÷àåòñÿ áîëåå áîãàòû-
ñîäåðæèò êîìïëåêò ðåãèñòð-óêàçà- ïðèìåðíî îäèíàêîâûå. ìè âîçìîæíîñòÿìè ðåäàêòîðà êîäà,
òåëü àäðåñà/ñ÷åò÷èê àäðåñà/áóôåð îòñóòñòâèåì êàêèõ-ëèáî îãðàíè÷åíèé
äàííûõ äëÿ òåêóùåãî ïàêåòà äàí- IAR íà ðàçìåð ôàéëîâ. Ê íåäîñòàòêàì
íûõ è òàêîé æå êîìïëåêò äëÿ ïîñ- Êîìïàíèÿ IAR ïðåäëàãàåò ñâîèì ýòîãî ðåøåíèÿ íåîáõîäèìî îòíåñòè
ëåäóþùåãî ïàêåòà. Íà ðèñóíêå 3 ïîëüçîâàòåëÿì íåñêîëüêî âåðñèé îòíîñèòåëüíî áîëåå ñëîæíóþ ïðîöå-
ïðåäñòàâëåíà ñòðóêòóðíàÿ ñõåìà ñðåäû ðàçðàáîòêè, êîòîðûå çíà÷è- äóðó íàñòðîéêè ñðåäû ïåðåä ïåðâûì
ïðèåìíîé ÷àñòè êîíòðîëëåðà ÏÄÏ. òåëüíî îòëè÷àþòñÿ ôóíêöèîíàëüíûìè èñïîëüçîâàíèåì. Íàáîð ïîääåðæèâàå-
Ïåðåäàþùàÿ ÷àñòü êîíòðîëëåðà óñò- âîçìîæíîñòÿìè è ñåðâèñíîé ïîääå- ìûõ JTAG-ýìóëÿòîðîâ ïðèìåðíî îäè-
ðîåíà èäåíòè÷íî. ðæêîé.  òîì ÷èñëå åñòü áåñïëàòíàÿ íàêîâûé. Ïîñëå òîãî, êàê êîìïàíèÿ
Segger âûïóñòèëà GDB-ñåðâåð äëÿ
ñâîèõ ýìóëÿòîðîâ, â ñðåäå Eclipse +
GCC ïîÿâèëàñü âîçìîæíîñòü èñïîëü-
çîâàíèÿ âñåé ëèíåéêè ýìóëÿòîðîâ îò
Segger. Ñëîæíîñòü íàñòðîéêè äåòàëåé
êîìïèëÿöèè ïðîåêòîâ (ëèíêîâêà, ïîä-
êëþ÷åíèå áèáëèîòåê, è ò.ä.) ïðèìåð-
íî îäèíàêîâàÿ. Îïòèìèçàöèÿ â GCC
íåçíà÷èòåëüíî óñòóïàåò IAR.

×òî âûáðàòü?
Îòëè÷èé ó ýòèõ ïðîäóêòîâ ìíîãî,
ïîýòîìó âñå çàâèñèò îò âîçìîæíîñòåé
ïî ïîêóïêå êîììåð÷åñêîé ñðåäû è
Ðèñ. 3. Êîíòðîëëåð ÏÄÏ (ïðèåìíàÿ ÷àñòü) ïðåäûäóùåãî îïûòà ðàáîòû. Ðàáîòà â
ñðåäå IAR ïîä ðàçíûìè àðõèòåêòóðàìè
ïðàêòè÷åñêè íå îòëè÷àåòñÿ. Ñ Eclipse,
íà ïåðâûé âçãëÿä, âñå íåñêîëüêî
Òàáëèöà 2. Ñðàâíèòåëüíûå õàðàêòåðèñòèêè êîìïèëÿòîðîâ ñëîæíåå, íî ê èíòóèòèâíî ïîíÿòíî-
Ïîääåðæêà ìó èíòåðôåéñó ïðèâûêíóòü íåòðóäíî.
Ñèìóëÿòîð ßçûêè è ñòàíäàðòû
ýìóëÿòîðîâ Äèàëåêòû ðàñøèðåíèé ÿçûêà Cè ó
RDI, Wiggler, ANSI CExtended ANSI IAR è GCC ðàçíûå. Â îñíîâíîì ýòî
IAR + AT91SAM-ICE, CExtended C++ (÷àñòè÷íàÿ êàñàåòñÿ ðàáîòû ñ ïàìÿòüþ è ïðåðû-
J-LINK … ïîääåðæêà C++) âàíèÿìè, ïîýòîìó ïðîñòîãî ïåðåíîñà
RDI, Wiggler, ANSI CC99 ïðîåêòà èç îäíîé ñðåäû â äðóãóþ íå
GNU GCC + Eclipse – AT91SAM-ICE, ÷àñòè÷íàÿ ïîëó÷èòñÿ. Îäíàêî, ÷èñòî àëãîðèòìè-
J-LINK … ïîääåðæêà C++
÷åñêèé êîä â ðàìêàõ ñòàíäàðòà ïåðå-
ICC Imagecraft – – ANSI C
íîñèòñÿ áåç êàêèõ-ëèáî òðóäíîñòåé.

Òåë.: (495) 741-7701 www.elcp.ru


2
ÌÊ è ÄÑÏ

Äëÿ ñâîèõ ìèêðîêîíòðîëëåðîâ Atmel


ïðåäëàãàåò ïîëüçîâàòåëÿì áèáëèîòåêó
äëÿ ðàáîòû ñ ïåðèôåðèåé. Ñóùåñòâóåò
âåðñèÿ áèáëèîòåêè IAR è äëÿ ðàáîòû
ñ GCC.

Êàê âñåì ýòèì ïîëüçîâàòüñÿ?


Ïðèìåð ïðîåêòà AT91SAM7S-
Interrupt_SAM7S íàõîäèòñÿ â êàòà-
ëîãå ARM\examples\SAM7S256 ñ
ïðèìåðàìè, âõîäÿùèìè â ñîñòàâ óñòà-
íîâêè IAR. Äëÿ ðàññìîòðåíèÿ áûë
âûáðàí ÌÊ AT91SAM7S256, óñòà-
íîâëåííûé íà ïëàòó AS-SAM7S-256
ïðîèçâîäñòâà ÀÐÃÓÑÑÎÔÒ. Ïðèìåð
ïîêàçûâàåò ðàáîòó ñ ïðåðûâàíèÿìè è
ïîðòîì USART0.

Óñòàíîâêà IAR Kickstart


Ñðåäà ðàçðàáîòêè (ñì. ðèñ. 4)
äîñòóïíà â èíòåðíåòå íà ñàéòå www.
iar.com. Äëÿ çàãðóçêè è ïîëó÷åíèÿ
ëèöåíçèîííîãî íîìåðà òðåáóåòñÿ áåñ- Ðèñ. 4. Ñðåäà IAR
ïëàòíàÿ ðåãèñòðàöèÿ. Ïîñëå çàãðóç-
êè è óñòàíîâêè ñðåäû ðàçðàáîòêè SAM7S). Ìèêðîñõåìû SAM7X ìîãóò RS-232 êîìïüþòåðà, òî â ñòàíäàðòíîé
â äèðåêòîðèè ñ IDE ìîæíî íàéòè ñðàçó çàãðóæàòüñÿ èç ÏÇÓ. Ïîñëå òåðìèíàëüíîé ïðîãðàììå ìîæíî óâè-
ïðèìåðû èñõîäíûõ êîäîâ. Äëÿ ýòîãî ïîäêëþ÷åíèÿ ê êîìïüþòåðó ìèêðî- äåòü ñîîáùåíèå, êîòîðîå ïèøåò ïëàòà
íàäî îòêðûòü ôàéë ïðîåêòà examples\ ñõåìà ãîòîâà ê ïðîãðàììèðîâàíèþ. ïðè çàãðóçêå.
SAM7S256\AT91SAM7S-Interrupt_ Ïðè çàïóñêå SAM-BA íåîáõîäèìî
SAM7S\Compil\BasicInterrupt_ ïðàâèëüíî óêàçàòü ñïîñîá ñîåäèíåíèÿ JTAG-ýìóëÿòîð
SAM7S.eww. è òèï ïðîãðàììèðóåìîé ìèêðîñõåìû. Êàæäûé ðàç ñòèðàòü ôëýø-ïàìÿòü,
Ñòàíäàðòíûé ïðèìåð èìååò òðè Ïðè ïåðâîì ïîäêëþ÷åíèè ïëàòû ê çàïèñûâàòü çàãðóç÷èê, ïðîãðàììèðî-
íàáîðà íàñòðîåê: äëÿ îòëàäêè èç ÎÇÓ, USB Windows óñòàíîâèò äëÿ íåå âàòü ÷åðåç SAM-BA – ïðè èíòåíñèâ-
äëÿ çàãðóçêè è îòëàäêè âî ôëýø- äðàéâåðû èç ïàêåòà AT91 ISP. íîé îòëàäêå ýòî óòîìëÿåò è îòíèìàåò
ïàìÿòü ñ ïîìîùüþ AT91SAMICE è ìíîãî âðåìåíè. Â ìèêðîêîíòðîëëåðàõ
äëÿ êîìïèëÿöèè áèíàðíîãî ôàéëà. Êîìïèëÿöèÿ. ñåìåéñòâà SAM7 åñòü ñïåöèàëüíûé
Ìèêðîêîíòðîëëåðû ñåðèè AT91SAM7, Çàãðóçêà ÷åðåç SAM-BA ìîäóëü äëÿ îòëàäêè íà êðèñòàëëå. Ñ
èìåþò âñòðîåííûé â ÏÇÓ çàãðóç÷èê, Äëÿ çàãðóçêè ÷åðåç SAM-BA òðå- åãî ïîìîùüþ ìîæíî óñòàíàâëèâàòü
êîòîðûé ïîçâîëÿåò ïðîãðàììèðîâàòü áóåòñÿ ôàéë â äâîè÷íîì ôîðìàòå òî÷êè îñòàíîâêè (breakpoint), ïðî-
ÌÊ ïî èíòåðôåéñó USB èëè RS-232. (bin, raw-binary â IAR). Äëÿ ýòîãî ãðàììèðîâàòü âíóòðåííþþ ïàìÿòü,
íóæíî âûáðàòü binary âìåñòî RAM_ èìåòü äîñòóï êî âñåì ðåãèñòðàì ÿäðà
Óñòàíîâêà AT91 ISP Debug â íàñòðîéêàõ Workspace, ïîñëå è ïåðèôåðèè. Ñ åãî ïîìîùüþ âîç-
Äëÿ èñïîëüçîâàíèÿ ýòîé âîçìîæ- ýòîãî ìîæíî êîìïèëèðîâàòü ïðîøèâ- ìîæíî, íàïðèìåð, óñòàíîâèòü òî÷êè
íîñòè (ïðîãðàììèðîâàíèÿ ïî USB êó êîìàíäîé Project – Make. Â ñëó- îñòàíîâêè íà äîñòóï ê äàííûì è óâè-
èëè RS-232) òðåáóåòñÿ óñòàíîâèòü ÷àå óäà÷íîé êîìïèëÿöèè â äèðåêòî- äåòü, ïðè âûïîëíåíèè êàêîé êîìàíäû
ïàêåò AT91 ISP. Â âåðñèþ 1.10 (òåêó- ðèè AT91SAM7S-Interrupt_SAM7S\ ïðîèñõîäèò ïåðåïîëíåíèå ñòåêà. Äðóã
ùàÿ íà ìîìåíò íàïèñàíèÿ ñòàòüè) âõî- Compile\Binary\Exe ïîÿâèòñÿ ôàéë îò äðóãà ýìóëÿòîðû ðàçíûõ òèïîâ
äÿò äâå ïðîãðàììû: SAM-BA (SAM BasicInterrupts_SAM7S.bin, ïðèãîä- îòëè÷àþòñÿ â îñíîâíîì ñêîðîñòüþ
Boot Assistant – ïîìîùíèê çàãðóçêè) íûé äëÿ çàãðóçêè ñ ïîìîùüþ SAM- ðàáîòû, ïðîãðàììíîé ïîääåðæêîé,
è SAM-PROG. SAM-BA ïîçâîëÿåò BA. Ïîñëå çàïóñêà SAM-BA íåîáõî- ñïèñêîì ïîääåðæèâàåìûõ ìèêðîñõåì.
ïðîãðàììèðîâàòü è íàñòðàèâàòü ÌÊ äèìî âûáðàòü ôàéë äëÿ çàãðóçêè â Äëÿ ðàáîòû ñ ìèêðîêîíòðîëëåðàìè
ñåìåéñòâ AT91SAM7/AT91SAM9 ïî ìèêðîñõåìó è íàæàòü êíîïêó Send SAM7 Atmel ïðåäëàãàåò JTAG-ýìó-
èíòåðôåéñó RS232 èëè USB. Äëÿ File (ñì. ðèñ. 5). Ïðîöåññ ïðîãðàììè- ëÿòîð AT91SAM-ICE.
ðàáîòû ïî USB íåîáõîäèì êâàðöåâûé ðîâàíèÿ çàíèìàåò íåñêîëüêî ñåêóíä.  êà÷åñòâå íåäîðîãîé àëüòåðíàòè-
ðåçîíàòîð 18, 432 ÌÃö è ñîîòâåòñòâó- Åñòü âîçìîæíîñòü ïðîâåðèòü öåëîñò- âû ìîæíî ðàññìîòðåòü Wiggler-ñîâ-
þùàÿ öåïü ÔÀÏ×. Òàáëèöà ñ ÷àñòîòà- íîñòü ïðîøèâêè ïîñëå ïðîãðàììèðî- ìåñòèìûé ãàëüâàíè÷åñêè ðàçâÿçàí-
ìè êâàðöåâûõ ðåçîíàòîðîâ äëÿ UART âàíèÿ. íûé ýìóëÿòîð AS-JTAG ïðîèçâîäñ-
èìååòñÿ â ôàéëå äîêóìåíòàöèè íà ìèê- Íà ýòîì ðàáîòà ñ SAM-BA çàâåð- òâà ÀÐÃÓÑÑÎÔÒ. Ýòîò ýìóëÿòîð
ðîñõåìó. Äàëåå íåîáõîäèìî, ÷òîáû â øåíà, ñëåäóåò çàêðûòü ïðèëîæåíèå è ïîäêëþ÷àåòñÿ ê êîìïüþòåðó ïî
ìèêðîêîíòðîëëåðå âûïîëíÿëàñü ïðî- ïåðåçàãðóçèòü êîíòðîëëåð. Ïðè ïîä- LPT-ïîðòó è ÷åðåç RDI-ñåðâåð H-
ãðàììà-çàãðóç÷èê. Äëÿ ýòîãî â ìèêðî- êëþ÷åíèè ïî USB òðåáóåòñÿ ïåðå- JTAG ïîäêëþ÷àåòñÿ ê IAR â êà÷åñ-
ñõåìàõ ñåìåéñòâà SAM7S ïîñëå ñòèðà- ïîäêëþ÷èòü ïëàòó, ïîñêîëüêó îïðå- òâå RDI-ýìóëÿòîðà. Ïðè íàñòðîé-
íèÿ ìèêðîñõåìû çàìûêàíèåì íîæêè äåëåíèå USB-óñòðîéñòâ ïðîèñõîäèò êå íåîáõîäèìî óêàçàòü áèáëèîòåêó
ERASE íóæíî ñêîïèðîâàòü çàãðóç÷èê òîëüêî ïðè èõ ïîäêëþ÷åíèè. hjtag.dll. Ñêîðîñòü ðàáîòû íåçíà-
èç ÏÇÓ âî ôëýø-ïàìÿòü, çàìêíóâ Åñëè ïîäêëþ÷èòü UART0 (íà ïëàòå ÷èòåëüíî ñíèæàåòñÿ ïî ñðàâíåíèþ ñ
íîæêó TEST (áîëåå ïîäðîáíî ýòîò AS-SAM7S-256 ìàðêèðîâàí RS-232; AT91SAM-ICE, íî äèñêîìôîðòà íå
àëãîðèòì îïèñàí â äîêóìåíòàöèè íà íå ïóòàòü ñ ïîðòîì DEBUG!) ê ïîðòó âûçûâàåò.

«Ýëåêòðîííûå êîìïîíåíòû» ¹7, 2007


3
ÌÊ è ÄÑÏ

Âíîñèì èçìåíåíèÿ «Hello, World!»


×åðåç JTAG-ýìóëÿòîð ìîæíî
çàãðóçèòü ïðîãðàììó â ìèêðîêîí-
òðîëëåð è âûïîëíèòü åå â ðåæèìå
îòëàäêè. Äëÿ ýòîãî íàäî ïîäêëþ-
÷èòü ýìóëÿòîð ê ïëàòå, âûñòàâèòü
RAM_Debug â ïîëå Workspace,
ñêîìïèëèðîâàòü, íà÷àòü îòëàäêó
(Project – Debug), çàïóñòèòü ïðî-
ãðàììó (Debug – Go).
Ïðîãðàììà ïðèíèìàåò äàííûå ñ
ïîðòà, âîçâðàùàåò èõ îáðàòíî, ïðîâå-
ðÿåò ñòàòóñ îøèáêè, âîçâðàùàåò åãî
â òåðìèíàë. ×òîáû ïðè ââîäå áóêâû
'z' â òåðìèíàëå ïîÿâèëîñü ñîîáùåíèå
«Hello, world» â ôàéëå interrupt_
Usart.c ôóíêöèÿ Uart_c_irq_handler
ïðèâîäèòñÿ ê âèäó:

… ранее без изменений


//* get Usart status register
status = USART_pt->US_CSR;
if ( status & AT91C_US_RXRDY){
//* Get byte and send
char tmp = Ðèñ. 5. Ðàáîòà ñ SAM-BA
AT91F_US_GetChar(USART_pt);
const char msg[]=
«Hello, world!»; ëè àíàëîãè÷íîé ãîòîâîé ôóíêöèè â ãî ïàêåòà äàííûõ áóäåò íà÷èíàòüñÿ
if (tmp == 'z') áèáëèîòåêå. â ñòðîãî îïðåäåëåííîå èìïóëüñîì
{ PWM âðåìÿ.
AT91F_US_SendFrame(USART_pt Ñîâìåñòíàÿ ðàáîòà äâóõ
(char *)msg,sizeof(msg),0,0); ïåðèôåðèéíûõ ìîäóëåé ÂÌÅÑÒÎ ÇÀÊËÞ×ÅÍÈß
} ×òîáû ïîêàçàòü, êàê ìîæíî Ïðè ïðîãðàììèðîâàíèè ìèêðî-
else èñïîëüçîâàòü êîíòðîëëåðû SSCè êîíòðîëëåðîâ ïîñòîÿííî ïðèõîäèòñÿ
AT91F_US_PutChar (USART_pt, tmp); PWM ñ èñïîëüçîâàíèåì ðåæèìà ðàáîòàòü ñ ïåðèôåðèéíûìè ìîäó-
} ïðÿìîãî äîñòóïà ê ïàìÿòè, ðàñ- ëÿìè. Íå âñåãäà ïîíÿòíîå îïèñàíèå
if (status & AT91C_US_OVRE) ñìîòðèì ñèñòåìó, êîòîðàÿ â ñòðî- óïðàâëÿþùèõ ðåãèñòðîâ ìîæåò ñòàòü
{ ãî îïðåäåëåííûå ìîìåíòû ïåðåäà- ãîðàçäî ÿñíåå, åñëè ïàðàëëåëüíî ðàñ-
… далее без изменений. åò äàííûå ïî ïîñëåäîâàòåëüíîìó ñìàòðèâàòü ïðàêòèêó ðàáîòû ñ íèìè
èíòåðôåéñó. Êàê èçâåñòíî, íà âõîä íà îñíîâå áèáëèîòåêè, à íåïîíÿòíûå
Ôóíêöèÿ AT91F_US_SendFrame â ïðåðûâàíèå òðåáóåòñÿ íåñêîëüêî íàçâàíèÿ ñòàíîâÿòñÿ îñìûñëåííû-
ïåðåäàåò ÷åðåç PDC äàííûå èç áóôå- òàêòîâ, ïðè ýòîì íå ìîæåò áûòü ìè ïîñëå âíèìàòåëüíîãî ïðî÷òåíèÿ
ðà msg â êîëè÷åñòâå, ðàâíîì äëèíå ïðåðâàíî âûïîëíåíèå òåêåóùåé èíñ- äîêóìåíòàöèè íà êðèñòàëë. Òàêæå
áóôåðà. ßäðî ïðîöåññîðà ïðè ýòîì òðóêöèè.  íàáîðå êîìàíä ARM íå ïîëåçíî èçó÷èòü ïðèìåðû èñõîäíûõ
îñòàåòñÿ ñâîáîäíûì. Àíàëîãè÷íî âñå êîìàíäû âûïîëíÿþòñÿ çà îäèí êîäîâ, êîòîðûå ïðèëàãàþòñÿ ê äèñò-
äàííûå ìîæíî ïðèíèìàòü. Äâà íóëÿ òàêò, ïîýòîìó ïðåðûâàíèå «â ÷èñòîì ðèáóòèâàì êîìïèëÿòîðîâ.
îáîçíà÷àþò îòñóòñòâèå âòîðîãî áóôå- âèäå» èñïîëüçîâàòü íå ïîëó÷àåòñÿ – Âî âòîðîé ÷àñòè ñòàòüè áóäåò ðàñ-
ðà. Ýòà ôóíêöèÿ óæå åñòü â áèáëè- ìîìåíò íà÷àëà âûäà÷è î÷åðåäíîãî ñìîòðåíà ðàáîòà ñ ìèêðîêîíòðîëëåðà-
îòåêå êîíòðîëëåðà. Åñëè ùåëêíóòü ïàêåòà áóäåò «ïëàâàòü» íà íåñêîëü- ìè íà ÿäðå ARM9.
ïðàâîé êíîïêîé ìûøè íà íàçâàíèè êî òàêòîâ ïðîöåññîðà. Åñòåñòâåííîå
ôóíêöèè, à çàòåì âûáðàòü ïóíêò Go ðåøåíèå - èñïîëüçîâàíèå PWM äëÿ ËÈÒÅÐÀÒÓÐÀ
to definition of¾ (ïåðåéòè ê îïðåäåëå- ôîðìèðîâàíèÿ âðåìåííûõ èìïóëü- 1. Êîðîëåâ Í. 32-ðàçðÿäíûå ìèê-
íèþ ôóíêöèè), òî îòêðîåòñÿ îïèñàíèå ñîâ. Äëÿ ïåðåäà÷è èñïîëüçóåòñÿ ðîêîíòðîëëåðû ATMEL íà áàçå ÿäðà
ôóíêöèè. Äëÿ AT91F_US_SendFrame êîíòðîëëåð SSC, êîòîðûé â îäíîì ARM7 // Êîìïîíåíòû è òåõíîëîãèè,
îòêðîåòñÿ ôàéë lib_AT91SAM7S256. èç ðåæèìîâ íà÷èíàåò ïåðåäà÷ó ïî 2006, ¹6.
h, â êîòîðîì íàõîäÿòñÿ ôóíêöèè äëÿ âíåøíåìó ôðîíòó. Âíåøíèì ôðîí- 2. Êîðîëåâ Í. Ñîâðåìåííûå ìèêðî-
ðàáîòû ñ êîíòðîëëåðîì. Ïåðåä òåì òîì áóäåò ñëóæèòü ñèãíàë ñ PWM. êîíòðîëëåðû ATMEL: àêöåíò íà 32-
êàê ïèñàòü ñâîþ ôóíêöèþ äëÿ ðàáî- Åñëè PDC çàïðîãðàììèðîâàí äî ðàçðÿäà // Ýëåêòðîííûå êîìïîíåíòû,
òû ñ ìîäóëåì, ñòîèò ïîñìîòðåòü, íåò ïðèõîäà ôðîíòà, òî ïåðåäà÷à êàæäî- 2006, ¹12.

«Ýëåêòðîííûå êîìïîíåíòû» ¹7, 2007


4

Вам также может понравиться