gawaskar kanagaraj / Mbed 2 deprecated Nucleo_printf

Dependencies:   mbed

Committer:
gawas
Date:
Fri Aug 23 16:43:44 2019 +0000
Revision:
0:ccdea31d8eba
init funtion;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gawas 0:ccdea31d8eba 1 #include <stm32f4xx_hal.h>
gawas 0:ccdea31d8eba 2 #include <apex_types.h>
gawas 0:ccdea31d8eba 3 #include <apex_queuing.h>
gawas 0:ccdea31d8eba 4
gawas 0:ccdea31d8eba 5 #include "context.h"
gawas 0:ccdea31d8eba 6 #include "drivers/time_get.h"
gawas 0:ccdea31d8eba 7 #include "process.h"
gawas 0:ccdea31d8eba 8 #include "part_scheduler.h"
gawas 0:ccdea31d8eba 9
gawas 0:ccdea31d8eba 10 #include "ports.h"
gawas 0:ccdea31d8eba 11
gawas 0:ccdea31d8eba 12
gawas 0:ccdea31d8eba 13 static uint32_t pop(uint32_t *p)
gawas 0:ccdea31d8eba 14 {
gawas 0:ccdea31d8eba 15 const uint32_t ret = *(uint32_t *)(*p);
gawas 0:ccdea31d8eba 16 *p += 4;
gawas 0:ccdea31d8eba 17 return ret;
gawas 0:ccdea31d8eba 18 }
gawas 0:ccdea31d8eba 19
gawas 0:ccdea31d8eba 20
gawas 0:ccdea31d8eba 21 void SVC_Handler(void)
gawas 0:ccdea31d8eba 22 {
gawas 0:ccdea31d8eba 23 ARM_HW_context_state* stack;
gawas 0:ccdea31d8eba 24
gawas 0:ccdea31d8eba 25 __ASM volatile (
gawas 0:ccdea31d8eba 26 "TST LR, #0x4 \n\t" // Test bit 2 of EXC_RETURN
gawas 0:ccdea31d8eba 27 "ITE EQ \n\t" // Which stack pointer was used?
gawas 0:ccdea31d8eba 28 "MRSEQ %0, MSP \n\t" // Move MSP into pointer if EQ flag is set
gawas 0:ccdea31d8eba 29 "MRSNE %0, PSP \n\t" // Move SSP into pointer if NE flag is set
gawas 0:ccdea31d8eba 30 : "=r" (stack)
gawas 0:ccdea31d8eba 31 : :
gawas 0:ccdea31d8eba 32 );
gawas 0:ccdea31d8eba 33
gawas 0:ccdea31d8eba 34 /* Disable sysTick */
gawas 0:ccdea31d8eba 35 SysTick->CTRL =
gawas 0:ccdea31d8eba 36 SysTick_CTRL_CLKSOURCE_Msk |
gawas 0:ccdea31d8eba 37 SysTick_CTRL_ENABLE_Msk;
gawas 0:ccdea31d8eba 38
gawas 0:ccdea31d8eba 39 switch (stack->R0) {
gawas 0:ccdea31d8eba 40 case 0xc0ffee0a:
gawas 0:ccdea31d8eba 41 {
gawas 0:ccdea31d8eba 42 uint8_t argc = 3;
gawas 0:ccdea31d8eba 43 uint32_t argv[argc];
gawas 0:ccdea31d8eba 44
gawas 0:ccdea31d8eba 45 while(argc--) {
gawas 0:ccdea31d8eba 46 argv[argc] = pop(&stack->R2);
gawas 0:ccdea31d8eba 47 }
gawas 0:ccdea31d8eba 48
gawas 0:ccdea31d8eba 49 runtime_create_process(
gawas 0:ccdea31d8eba 50 (PROCESS_ATTRIBUTE_TYPE *) argv[0],
gawas 0:ccdea31d8eba 51 (PROCESS_ID_TYPE *) argv[1],
gawas 0:ccdea31d8eba 52 (RETURN_CODE_TYPE *) argv[2]);
gawas 0:ccdea31d8eba 53 break;
gawas 0:ccdea31d8eba 54 }
gawas 0:ccdea31d8eba 55 case 0xc0ffee0b:
gawas 0:ccdea31d8eba 56 {
gawas 0:ccdea31d8eba 57 uint64_t time = TIME_Get_Total();
gawas 0:ccdea31d8eba 58 stack->R0 = NO_ERROR;
gawas 0:ccdea31d8eba 59 stack->R1 = (uint32_t) time;
gawas 0:ccdea31d8eba 60 stack->R2 = (uint32_t) (time >> 32);
gawas 0:ccdea31d8eba 61 break;
gawas 0:ccdea31d8eba 62 }
gawas 0:ccdea31d8eba 63 case 0xc0ffee0c:
gawas 0:ccdea31d8eba 64 {
gawas 0:ccdea31d8eba 65 uint8_t argc = 7;
gawas 0:ccdea31d8eba 66 uint32_t argv[argc];
gawas 0:ccdea31d8eba 67
gawas 0:ccdea31d8eba 68 while(argc--) {
gawas 0:ccdea31d8eba 69 argv[argc] = pop(&stack->R2);
gawas 0:ccdea31d8eba 70 }
gawas 0:ccdea31d8eba 71
gawas 0:ccdea31d8eba 72 create_queuing_port(
gawas 0:ccdea31d8eba 73 (char *) argv[0],
gawas 0:ccdea31d8eba 74 (MESSAGE_SIZE_TYPE) argv[1],
gawas 0:ccdea31d8eba 75 (MESSAGE_RANGE_TYPE) argv[2],
gawas 0:ccdea31d8eba 76 (PORT_DIRECTION_TYPE) argv[3],
gawas 0:ccdea31d8eba 77 (QUEUING_DISCIPLINE_TYPE) argv[4],
gawas 0:ccdea31d8eba 78 (QUEUING_PORT_ID_TYPE *) argv[5],
gawas 0:ccdea31d8eba 79 (RETURN_CODE_TYPE *) argv[6]);
gawas 0:ccdea31d8eba 80 break;
gawas 0:ccdea31d8eba 81 }
gawas 0:ccdea31d8eba 82 case 0xc0ffee0d:
gawas 0:ccdea31d8eba 83 {
gawas 0:ccdea31d8eba 84 uint8_t argc = 5;
gawas 0:ccdea31d8eba 85 uint32_t argv[argc];
gawas 0:ccdea31d8eba 86
gawas 0:ccdea31d8eba 87 while(argc--) {
gawas 0:ccdea31d8eba 88 argv[argc] = pop(&stack->R2);
gawas 0:ccdea31d8eba 89 }
gawas 0:ccdea31d8eba 90
gawas 0:ccdea31d8eba 91 recieve_queuing_message(
gawas 0:ccdea31d8eba 92 (QUEUING_PORT_ID_TYPE) argv[0],
gawas 0:ccdea31d8eba 93 (SYSTEM_TIME_TYPE) argv[1],
gawas 0:ccdea31d8eba 94 (MESSAGE_ADDR_TYPE) argv[2],
gawas 0:ccdea31d8eba 95 (MESSAGE_SIZE_TYPE *) argv[3],
gawas 0:ccdea31d8eba 96 (RETURN_CODE_TYPE *) argv[4]);
gawas 0:ccdea31d8eba 97 break;
gawas 0:ccdea31d8eba 98 }
gawas 0:ccdea31d8eba 99 case 0xc0ffee0e:
gawas 0:ccdea31d8eba 100 {
gawas 0:ccdea31d8eba 101 uint8_t argc = 5;
gawas 0:ccdea31d8eba 102 uint32_t argv[argc];
gawas 0:ccdea31d8eba 103
gawas 0:ccdea31d8eba 104 while(argc--) {
gawas 0:ccdea31d8eba 105 argv[argc] = pop(&stack->R2);
gawas 0:ccdea31d8eba 106 }
gawas 0:ccdea31d8eba 107
gawas 0:ccdea31d8eba 108 send_queuing_message(
gawas 0:ccdea31d8eba 109 (QUEUING_PORT_ID_TYPE) argv[0],
gawas 0:ccdea31d8eba 110 (MESSAGE_ADDR_TYPE) argv[1],
gawas 0:ccdea31d8eba 111 (MESSAGE_SIZE_TYPE) argv[2],
gawas 0:ccdea31d8eba 112 (SYSTEM_TIME_TYPE) argv[3],
gawas 0:ccdea31d8eba 113 (RETURN_CODE_TYPE *) argv[4]);
gawas 0:ccdea31d8eba 114 break;
gawas 0:ccdea31d8eba 115 }
gawas 0:ccdea31d8eba 116 case 0xc0ffee0f:
gawas 0:ccdea31d8eba 117 {
gawas 0:ccdea31d8eba 118 uint8_t argc = 3;
gawas 0:ccdea31d8eba 119 uint32_t argv[argc];
gawas 0:ccdea31d8eba 120
gawas 0:ccdea31d8eba 121 while(argc--) {
gawas 0:ccdea31d8eba 122 argv[argc] = pop(&stack->R2);
gawas 0:ccdea31d8eba 123 }
gawas 0:ccdea31d8eba 124
gawas 0:ccdea31d8eba 125 get_queuing_port_id(
gawas 0:ccdea31d8eba 126 (char *) argv[0],
gawas 0:ccdea31d8eba 127 (QUEUING_PORT_ID_TYPE *) argv[1],
gawas 0:ccdea31d8eba 128 (RETURN_CODE_TYPE *) argv[2]);
gawas 0:ccdea31d8eba 129 break;
gawas 0:ccdea31d8eba 130 }
gawas 0:ccdea31d8eba 131 case 0xc0ffee10:
gawas 0:ccdea31d8eba 132 {
gawas 0:ccdea31d8eba 133 uint8_t argc = 3;
gawas 0:ccdea31d8eba 134 uint32_t argv[argc];
gawas 0:ccdea31d8eba 135
gawas 0:ccdea31d8eba 136 while(argc--) {
gawas 0:ccdea31d8eba 137 argv[argc] = pop(&stack->R2);
gawas 0:ccdea31d8eba 138 }
gawas 0:ccdea31d8eba 139
gawas 0:ccdea31d8eba 140 get_queuing_port_status(
gawas 0:ccdea31d8eba 141 (QUEUING_PORT_ID_TYPE) argv[0],
gawas 0:ccdea31d8eba 142 (QUEUING_PORT_STATUS_TYPE *) argv[1],
gawas 0:ccdea31d8eba 143 (RETURN_CODE_TYPE *) argv[2]);
gawas 0:ccdea31d8eba 144 break;
gawas 0:ccdea31d8eba 145 }
gawas 0:ccdea31d8eba 146 case 0xc0ffee11:
gawas 0:ccdea31d8eba 147 {
gawas 0:ccdea31d8eba 148 process_stop_self();
gawas 0:ccdea31d8eba 149 break;
gawas 0:ccdea31d8eba 150 }
gawas 0:ccdea31d8eba 151 default:
gawas 0:ccdea31d8eba 152 break;
gawas 0:ccdea31d8eba 153 }
gawas 0:ccdea31d8eba 154
gawas 0:ccdea31d8eba 155 /* Enable sysTick */
gawas 0:ccdea31d8eba 156 SysTick->CTRL =
gawas 0:ccdea31d8eba 157 SysTick_CTRL_CLKSOURCE_Msk |
gawas 0:ccdea31d8eba 158 SysTick_CTRL_TICKINT_Msk |
gawas 0:ccdea31d8eba 159 SysTick_CTRL_ENABLE_Msk;
gawas 0:ccdea31d8eba 160 }
gawas 0:ccdea31d8eba 161