123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- #include <iom323.h>
- EXTERN SIG_OUTPUT_COMPARE1A
- EXTERN SIG_UART_RECV
- EXTERN SIG_UART_DATA
- EXTERN vTaskSwitchContext
- EXTERN pxCurrentTCB
- EXTERN xTaskIncrementTick
- EXTERN uxCriticalNesting
- PUBLIC vPortYield
- PUBLIC vPortYieldFromTick
- PUBLIC vPortStart
- ASEG
- ORG TIMER1_COMPA_vect
- jmp SIG_OUTPUT_COMPARE1A
- ORG USART_RXC_vect
- jmp SIG_UART_RECV
- ORG USART_UDRE_vect
- jmp SIG_UART_DATA
- RSEG CODE
- portSAVE_CONTEXT MACRO
- st -y, r0
- in r0, SREG
- cli
- st -y, r0
- in r0, SPL
- st -y, r0
- in r0, SPH
- st -y, r0
- st -y, r1
- st -y, r2
- st -y, r3
- st -y, r4
- st -y, r5
- st -y, r6
- st -y, r7
- st -y, r8
- st -y, r9
- st -y, r10
- st -y, r11
- st -y, r12
- st -y, r13
- st -y, r14
- st -y, r15
- st -y, r16
- st -y, r17
- st -y, r18
- st -y, r19
- st -y, r20
- st -y, r21
- st -y, r22
- st -y, r23
- st -y, r24
- st -y, r25
- st -y, r26
- st -y, r27
- st -y, r30
- st -y, r31
- lds r0, uxCriticalNesting
- st -y, r0
- lds r26, pxCurrentTCB
- lds r27, pxCurrentTCB + 1
- st x+, r28
- st x+, r29
- ENDM
- portRESTORE_CONTEXT MACRO
- lds r26, pxCurrentTCB
- lds r27, pxCurrentTCB + 1
- ld r28, x+
- ld r29, x+
- ld r0, y+
- sts uxCriticalNesting, r0
- ld r31, y+
- ld r30, y+
- ld r27, y+
- ld r26, y+
- ld r25, y+
- ld r24, y+
- ld r23, y+
- ld r22, y+
- ld r21, y+
- ld r20, y+
- ld r19, y+
- ld r18, y+
- ld r17, y+
- ld r16, y+
- ld r15, y+
- ld r14, y+
- ld r13, y+
- ld r12, y+
- ld r11, y+
- ld r10, y+
- ld r9, y+
- ld r8, y+
- ld r7, y+
- ld r6, y+
- ld r5, y+
- ld r4, y+
- ld r3, y+
- ld r2, y+
- ld r1, y+
- ld r0, y+
- out SPH, r0
- ld r0, y+
- out SPL, r0
- ld r0, y+
- out SREG, r0
- ld r0, y+
- ENDM
- vPortYield:
- portSAVE_CONTEXT
- call vTaskSwitchContext
- portRESTORE_CONTEXT
- ret
- vPortYieldFromTick:
- portSAVE_CONTEXT
- call xTaskIncrementTick
- tst r16
- breq SkipTaskSwitch
- call vTaskSwitchContext
- SkipTaskSwitch:
- portRESTORE_CONTEXT
- ret
- vPortStart:
- portRESTORE_CONTEXT
- ret
- vNoISR:
- reti
- END
|