ÔÚÒì³£Èë¿Ú´¦±»Ñ¹ÈëÕ»¿Õ¼äµÄÊý¾Ý¿éΪջ֡¡£²»¾ßÓи¡µãµ¥ÔªµÄM4´¦ÀíÆ÷£¬Õ»Ö¡ÊÇ8¸ö×Ö´óС¡£´ø¸¡µãµÄÕ»Ö¡¿ÉÄÜÊÇ8¸ö»ò26¸ö×Ö´óС¡£ÓëÉÏÒ»¸öС½ÚÖÐËù˵µÄÒì³£´¦ÀíÆÚ¼ä±£´æµÄ¼Ä´æÆ÷Ϊ8¸öÊÇÒ»¸öÒâ˼¡£
AAPCSÒªÇóÕ»Ö¸ÕëµÄÊýÖµÔÚº¯ÊýÈë¿ÚºÍ³ö¿Ú´¦Ó¦ÊÇË«×Ö¶ÔÆëµÄ£¬Ë«×ÖÕ»¶ÔÆëÌØÐԿɱà³Ì£¬¸ÃÌØÐÔ¿ÉÒԹرա£M0Öв»¿ÉÉèÖá£Ñ¹Õ»µÄxPSRµÄµÚ9λ±íʾջָÕëµÄÊýÖµÊÇ·ñµ÷Õû¹ý£¬0δµ÷Õû£¬1µ÷Õû¹ý£¬Ò²¾ÍÊÇ»á×Ô¶¯²åÈëÒ»¸ö×ֵĿռ䡣ËùÒÔ£¬Õ»Ö¡×î´óΪ9»ò27¸ö×Ö¡£
6.3 EXC_RETURN
6.1С½ÚÖÐ˵µ½¹ý£¬´¦ÀíÆ÷½øÈëÒ쳣ʱ£¬LR´æ´¢µÄÊÇEXC_RETURN£¬ÕâÀï˵Ã÷һϣ¬EXC_RETURNµÄ¾ßÌåϸ½Ú¡£
EXC_RETURNÊÇÒ»¸ö×Ö´óС£¬Î»Óò±íʾÈçÏÂ
λ 31:28 27:5 4 ÃèÊö EXC_RETURN ָʾ ±£ÁôȫΪ1 Õ»Ö¡ÀàÐÍ (M0ÖÐÎÞ) 3 ·µ»ØÄ£Ê½ ÊýÖµ 0xF 0Xefffff 1£º8×Ö 0£º26×Ö 1£º·µ»ØÏß³Ìģʽ 0£º·µ»Ø´¦Àíģʽ 2 ·µ»ØÕ» 1£º·µ»ØÏß³ÌÕ» 0£º·µ»ØÖ÷Õ» 1 0 EXC_RETURNµÄºÏ·¨Öµ
·µ»Ø´¦Àíģʽ£¬×ÜʹÓÃÖ÷Õ» ·µ»ØÏß³Ìģʽ£¬·µ»ØºóʹÓÃÖ÷Õ» ·µ»ØÏß³Ìģʽ£¬·µ»ØºóʹÓýø³ÌÕ» __asm void vPortSVCHandler( void ) {
±£Áô ±£Áô 0 1 ¸¡µãδʹÓÃFPCA=1 ¸¡µãʹÓÃFPCA=0 0XFFFFFFE1 0XFFFFFFE9 0XFFFFFFED 0XFFFFFFF1 0XFFFFFFF1 0XFFFFFFFD PRESERVE8
ldr r3, =pxCurrentTCB
/* Restore the task stack pointer. */ /* Restore the context. */
ldr r1, [r3] }
ldr r0, [r1]
ldmia r0!, {r4-r11} msr psp, r0 isb mov r0, #0 msr basepri, r0
orr r14, #0xd /*»òÉÏ0b1101£¬·µ»ØÏß³ÌÕ»£¬Ïß³Ìģʽ*/ bx r14
6.4Òì³£Á÷³Ì 6.4.1 Òì³£½øÈëºÍѹջ
µ±Òì³£²úÉúÇÒ±»´¦ÀíÆ÷½ÓÊÜʱ£¬Ñ¹Õ»Á÷³Ì»á½«¼Ä´æÆ÷ѹÈëÕ»Öв¢×éÖ¯Õ»Ö¡¡£Òª×¢ÒâµÄÊÇ£¬Ñ¹Õ»ÆÚ¼äµÄÕ»·ÃÎÊ˳ÐòºÍÕ»Ö¡ÖеÄ˳Ðò²»Í¬£¬Ê×ÏÈѹջµÄÊÇPCºÍxPSR£¬ÕâÑùÔÚÈ¡ÏòÁ¿Ê±»á¾¡¿ì¸üÐÂPC¡£
ÕâÀïÔÙ¸´Ï°Ò»ÏÂÖ÷Õ»Óë½ø³ÌÕ»µÄʹÓã¬ÔÚ´¦Àíģʽ£¬±ØÐëʹÓÃÖ÷Õ»£¬ÔÚ½ø³Ìģʽ£¬ÓÉCONTROL¼Ä´æÆ÷¿ØÖÆÊ¹ÓÃÖ÷Õ»»¹Êǽø³Ì¡£
ÔÚ´¦ÀíÆ÷´¦ÓÚ½ø³Ìģʽ²¢ÇÒʹÓýø³Ìջʱ£¬Ñ¹Õ»²Ù×÷ʹÓýø³ÌÕ»£¬È»ºó¾Í½øÈëÁË´¦Àíģʽ£¬Ö±µ½Òì³£·µ»ØÖ®Ç°£¬Ò»Ö±Ê¹ÓõÄÊÇÖ÷Õ»£¬ÈçÒ쳣ǶÌ×µÄÇé¿ö£¬ÔÚÒ»¸öÒì³£ÖÐÓÖ½øÈëÁËÁíÒ»¸öÒì³££¬ÈÔȻʹÓõÄÊÇÖ÷Õ»½øÐÐѹջ¡£
ÁíÍ⣬ÎÒÃÇÔÚʹÓÃOSµÄʱºò»áÓÐÁ½¸öÕ»¿Õ¼ä£¬ÏµÍ³Õ»¿Õ¼äºÍÈÎÎñÕ»¿Õ¼ä£¬ÏµÍ³Õ»¿Õ¼äÊÇÔÚÆô¶¯ÎļþÖнøÐÐÁËÉèÖã¬Èçͼ6-1£¬Õâ¸öÕ»¿Õ¼äÊÇÁô¸øÒ쳣ʹÓõģ¬Ò²¾ÍÊÇ´¦ÀíģʽϵÄMSP£»¶øÔÚ´´½¨ÈÎÎñµÄʱºò¶¼»áÓжÔÕ»¿Õ¼äµÄÉèÖã¬ÎÒÃdzÆÎªÈÎÎñÕ»¿Õ¼ä£¬Ò²¾ÍÊÇÔÚÏß³ÌģʽϵÄPSP¡£
½øÈëÒ쳣ʱ£¬»á½«R0-R3£¬R12£¬LRºÍ·µ»ØµØÖ·£¨´ø¸¡µãµ¥ÔªÊ±°üÀ¨S0-S15ºÍFPSCR£©Ó²¼þ×Ô¶¯Ñ¹Õ»±£´æ£¬ÆäËûµÄ(R4-R11)ÐèÒªÈí¼þ±£´æ¡£
6.4.2 Òì³£·µ»ØºÍ³öÕ»
³öջʱ¾ÍÊǶÔEXC_RETURNÊýÖµµÄÅжϣ¬Ò²¾ÍÊÇEXC_RETURNÖÐλÓòËù±íʾµÄÄǼ¸ÏÓÃʲôջ½øÐÐѹջµÄÈÔ·µ»ØÊ²Ã´Õ»£¬²Ù×÷ģʽºÍÕ»Ö¡ÀàÐÍÒ²ÀàËÆ¡£³öÕ»²Ù×÷½áÊøÊ±£¬»¹Òª¼ì²éxPSRµÄµÚ9룬ÈôÖÃ1ÔòÈ¥³ýѹջʱ²åÈëµÄ¶îÍâ¿Õ¼ä¡£ ¶ÔÓÚÕ»¿Õ¼äÖеÄÊý¾Ý£¬Í¬ÈëÕ»Ò»Ñù£¬R0-R3£¬R12£¬ºÍLR£¨´ø¸¡µãµ¥ÔªÊ±°üÀ¨S0-S15ºÍFPSCR£©ÊÇ×Ô¶¯³öÕ»µÄ£¬ÆäÓàµÄÐèÒªÈí¼þ³öÕ»¡£
7µÍ¹¦ºÄºÍϵͳ¿ØÖÆÌØÐÔ
7.1 µÍ¹¦ºÄģʽ
CORTEX-MϵÁд¦ÀíÆ÷ÌṩÁ½ÖÖÐÝÃßģʽ£ºÐÝÃßģʽºÍÉî¶ÈÐÝÃßģʽ¡£ÓÉϵͳ¿ØÖƼĴæÆ÷SCR¿ØÖÆ¡£
´¦ÀíÆ÷ÌṩÁËÁ½¸öÓÃÓÚ½øÈëÐÝÃßģʽµÄÖ¸ÁWFI£¬½øÈëÐÝÃßģʽ£¬µÈ´ýÖжϣ¬¿ÉÓÉÖжϡ¢µ÷ÊÔ¡¢¸´Î»»½ÐÑ¡£WFE£ºµÈ´ýʼþ£¬Ìõ¼þ½øÈëÐÝÃßģʽ¡£ÄÚ²¿Ê¼þ¼Ä´æÆ÷Ϊ0£¬½øÈëÐÝÃߣ¬·ñÔòÄÚ²¿Ê¼þ¼Ä´æÆ÷±»Çå³ý£¬´¦ÀíÆ÷¼ÌÐøÖ´ÐУ¬³ýÁËÖжϡ¢µ÷ÊÔ¡¢¸´Î»»½ÐÑÍ⣬»¹ÄÜÓÉʼþ»½ÐÑ¡£
WFEÖеÄʼþ»½ÐѰüÀ¨Ê¼þÊäÈëÐźÅÂö³å£¨RXEV£©¡£¸ÃÐźÅÊôÓÚʼþͨÐŽӿÚÌØÐÔµÄÒ»²¿·Ö¡£´¦ÀíÆ÷»¹´æÔÚÒ»¸öÃûΪTXEV£¨·¢ËÍʼþ£©µÄÊä³öÐźţ¬µ±Ö´ÐÐSEV£¨·¢ËÍʼþ£©Ö¸Áîʱ£¬TXEV»áÊä³öÒ»¸öÖÜÆÚµÄÂö³åÐźš£
ʼþͨÐŽӿڵÄÖ÷ÒªÉè¼ÆÄ¿±ê룬ÔÚÒ»¸öÌØ¶¨Ê¼þ·¢ÉúǰÈô¦ÀíÆ÷Ò»Ö±´¦ÓÚÐÝÃßģʽ¡£ÀýÈ磺
¡¤ ÔÊÐíÍâÉèºÍ´¦ÀíÆ÷Ö®¼äµÄͨÐÅ ¡¤ ÔÊÐí¶à¸ö´¦ÀíÆ÷¼äµÄͨÐÅ
7.1 SysTick¶¨Ê±Æ÷
Cortex-M´¦ÀíÆ÷ÄÚ¼¯³ÉÁËÒ»¸öСÐ͵ÄÃûΪSystickµÄ¶¨Ê±Æ÷£¬ËüÊôÓÚNVICµÄÒ»²¿·Ö£¬¿ÉÒÔ²úÉúSystickÒì³£¡£SystickΪ¼òµ¥µÄÏòϼÆÊýµÄ24λ¼ÆÊýÆ÷¡£ SystickµÄÖ÷Òª×÷ÓÃÊÇÓÃÓÚÔÚOSÖÐÈÎÎñ¹ÜÀíºÍÉÏÏÂÎÄÇл»£¬´¦ÀíÆ÷¿ÉÒÔÔÚ²»Í¬Ê±¼äƬÄÚ´¦Àí²»Í¬ÈÎÎñ¡£
Éè¼ÆÕâ¸ö¶¨Ê±Æ÷µÄÄ¿µÄÊÇΪÁËÔö¼ÓÈí¼þµÄ¿ÉÒÆÖ²ÐÔ¡£ËùÓÐCORTEX-MϵÁеÄоƬ¶¼ÓÐÏàͬµÄ¶¨Ê±Æ÷¡£¶¨Ê±Æ÷µÄʱÖÓ¿ÉÒÔÊÇ´¦ÀíÆ÷ʱÖÓ»òÕßÊÇÍⲿ²Î¿¼Ê±ÖÓ(STCLK)¡£
¶¨Ê±Æ÷µÄʹÓúܼòµ¥£¬Ö»ÓÐËĸö¼Ä´æÆ÷
µØÖ· 0XE000E010 0XE000E014 0XE000E018 0XE000E01C
¼Ä´æÆ÷ Systick¿ØÖƺÍ״̬¼Ä´æÆ÷ SystickÖØ×°ÔØÖµ¼Ä´æÆ÷ Systickµ±Ç°Öµ¼Ä´æÆ÷ SystickУ׼ֵ¼Ä´æÆ÷ ×÷Óà ʹÄÜÒÔ¼°ÉèÖÃSystick Systick¼ÆÊ±ÖÜÆÚ Systickµ±Ç°ÊýÖµ У׼ÉèÖÃ
Ïà¹ØÍÆ¼ö£º