nkjnm
Dependencies: MAX44000 nexpaq_mdk
Fork of LED_Demo by
nexpaq_mdk_src/source/np_system.c@0:b86eda0e990d, 2016-09-17 (annotated)
- Committer:
- nexpaq
- Date:
- Sat Sep 17 16:21:40 2016 +0000
- Revision:
- 0:b86eda0e990d
- Child:
- 2:3842948024ca
checking in to share
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nexpaq | 0:b86eda0e990d | 1 | /* |
nexpaq | 0:b86eda0e990d | 2 | * np_system.c |
nexpaq | 0:b86eda0e990d | 3 | * |
nexpaq | 0:b86eda0e990d | 4 | * Created on: July 14, 2016 |
nexpaq | 0:b86eda0e990d | 5 | * Author: Alan.Lin |
nexpaq | 0:b86eda0e990d | 6 | * |
nexpaq | 0:b86eda0e990d | 7 | * Copyright: NexPack Ltd. |
nexpaq | 0:b86eda0e990d | 8 | */ |
nexpaq | 0:b86eda0e990d | 9 | |
nexpaq | 0:b86eda0e990d | 10 | #include "np_config.h" |
nexpaq | 0:b86eda0e990d | 11 | #include "np_driver_timer.h" |
nexpaq | 0:b86eda0e990d | 12 | #include "np_driver_spi.h" |
nexpaq | 0:b86eda0e990d | 13 | #include "np_app_spi.h" |
nexpaq | 0:b86eda0e990d | 14 | #include "np_app_ncn_interface.h" |
nexpaq | 0:b86eda0e990d | 15 | #include "spis.h" |
nexpaq | 0:b86eda0e990d | 16 | #include "np_system.h" |
nexpaq | 0:b86eda0e990d | 17 | #include "np_command.h" |
nexpaq | 0:b86eda0e990d | 18 | |
nexpaq | 0:b86eda0e990d | 19 | extern const gpio_cfg_t gpio_req_spi[]; |
nexpaq | 0:b86eda0e990d | 20 | |
nexpaq | 0:b86eda0e990d | 21 | /* Description: delay function |
nexpaq | 0:b86eda0e990d | 22 | * t_ms: the time for delay.MS as the unit |
nexpaq | 0:b86eda0e990d | 23 | * |
nexpaq | 0:b86eda0e990d | 24 | */ |
nexpaq | 0:b86eda0e990d | 25 | void delay_ms(uint32_t t_ms) |
nexpaq | 0:b86eda0e990d | 26 | { |
nexpaq | 0:b86eda0e990d | 27 | while(t_ms) { |
nexpaq | 0:b86eda0e990d | 28 | SYS_SysTick_Delay(96000); |
nexpaq | 0:b86eda0e990d | 29 | t_ms--; |
nexpaq | 0:b86eda0e990d | 30 | } |
nexpaq | 0:b86eda0e990d | 31 | } |
nexpaq | 0:b86eda0e990d | 32 | |
nexpaq | 0:b86eda0e990d | 33 | /* |
nexpaq | 0:b86eda0e990d | 34 | * Description: disable all interrupt used on MDK |
nexpaq | 0:b86eda0e990d | 35 | * Parameter : null |
nexpaq | 0:b86eda0e990d | 36 | * Return : null |
nexpaq | 0:b86eda0e990d | 37 | */ |
nexpaq | 0:b86eda0e990d | 38 | void np_system_disable_interrupt(void) |
nexpaq | 0:b86eda0e990d | 39 | { |
nexpaq | 0:b86eda0e990d | 40 | NVIC_DisableIRQ(TMR0_0_IRQn); |
nexpaq | 0:b86eda0e990d | 41 | NVIC_DisableIRQ(SPIS_IRQn); |
nexpaq | 0:b86eda0e990d | 42 | } |
nexpaq | 0:b86eda0e990d | 43 | |
nexpaq | 0:b86eda0e990d | 44 | /* |
nexpaq | 0:b86eda0e990d | 45 | * Description: Setting the version of MDK |
nexpaq | 0:b86eda0e990d | 46 | * Parameter: mdk version |
nexpaq | 0:b86eda0e990d | 47 | * Return: null |
nexpaq | 0:b86eda0e990d | 48 | */ |
nexpaq | 0:b86eda0e990d | 49 | void np_function_set_mdk_version(uint8_t HV, uint8_t MV, uint8_t LV) |
nexpaq | 0:b86eda0e990d | 50 | { |
nexpaq | 0:b86eda0e990d | 51 | mdk_mdk_version[0] = HV; |
nexpaq | 0:b86eda0e990d | 52 | mdk_mdk_version[1] = MV; |
nexpaq | 0:b86eda0e990d | 53 | mdk_mdk_version[2] = LV; |
nexpaq | 0:b86eda0e990d | 54 | } |
nexpaq | 0:b86eda0e990d | 55 | |
nexpaq | 0:b86eda0e990d | 56 | /* |
nexpaq | 0:b86eda0e990d | 57 | * Description: MDK initial |
nexpaq | 0:b86eda0e990d | 58 | * Parameter : null |
nexpaq | 0:b86eda0e990d | 59 | * Return : null |
nexpaq | 0:b86eda0e990d | 60 | */ |
nexpaq | 0:b86eda0e990d | 61 | void np_mdk_setup(void) |
nexpaq | 0:b86eda0e990d | 62 | { |
nexpaq | 0:b86eda0e990d | 63 | int t_reback = E_BUSY; |
nexpaq | 0:b86eda0e990d | 64 | |
nexpaq | 0:b86eda0e990d | 65 | GPIO_Config(&gpio_req_spi[0]); //Input |
nexpaq | 0:b86eda0e990d | 66 | //ignore clock initial |
nexpaq | 0:b86eda0e990d | 67 | while(t_reback != E_NO_ERROR) { |
nexpaq | 0:b86eda0e990d | 68 | t_reback = driver_spi_slave_initial(); |
nexpaq | 0:b86eda0e990d | 69 | delay_ms(10); |
nexpaq | 0:b86eda0e990d | 70 | } |
nexpaq | 0:b86eda0e990d | 71 | |
nexpaq | 0:b86eda0e990d | 72 | Timer0_initial(); |
nexpaq | 0:b86eda0e990d | 73 | np_function_set_post_address(RAM_SOURCE_ADDR); |
nexpaq | 0:b86eda0e990d | 74 | |
nexpaq | 0:b86eda0e990d | 75 | spi_status = SPI_FREE; |
nexpaq | 0:b86eda0e990d | 76 | my_node = RAM_MY_NODE; |
nexpaq | 0:b86eda0e990d | 77 | } |
nexpaq | 0:b86eda0e990d | 78 | |
nexpaq | 0:b86eda0e990d | 79 | /* |
nexpaq | 0:b86eda0e990d | 80 | * Description: system initial,include app initial and mdk initial |
nexpaq | 0:b86eda0e990d | 81 | * Parameter : null |
nexpaq | 0:b86eda0e990d | 82 | * Return : null |
nexpaq | 0:b86eda0e990d | 83 | */ |
nexpaq | 0:b86eda0e990d | 84 | void np_system_initial(app_function np_app_setup) |
nexpaq | 0:b86eda0e990d | 85 | { |
nexpaq | 0:b86eda0e990d | 86 | uint8_t answer = 0; |
nexpaq | 0:b86eda0e990d | 87 | |
nexpaq | 0:b86eda0e990d | 88 | np_function_set_mdk_version(1,0,7); |
nexpaq | 0:b86eda0e990d | 89 | np_mdk_setup(); |
nexpaq | 0:b86eda0e990d | 90 | np_app_setup(); |
nexpaq | 0:b86eda0e990d | 91 | np_function_ncn_interface_post_message(RSP_INTO_APP, &answer, 1); |
nexpaq | 0:b86eda0e990d | 92 | flag_jump_bsl = 0; |
nexpaq | 0:b86eda0e990d | 93 | } |
nexpaq | 0:b86eda0e990d | 94 | |
nexpaq | 0:b86eda0e990d | 95 | /* |
nexpaq | 0:b86eda0e990d | 96 | * Description: mdk initialization |
nexpaq | 0:b86eda0e990d | 97 | * Parameter : null |
nexpaq | 0:b86eda0e990d | 98 | * Return : null |
nexpaq | 0:b86eda0e990d | 99 | */ |
nexpaq | 0:b86eda0e990d | 100 | void np_sys_init() |
nexpaq | 0:b86eda0e990d | 101 | { |
nexpaq | 0:b86eda0e990d | 102 | np_function_set_mdk_version(1,0,7); |
nexpaq | 0:b86eda0e990d | 103 | np_mdk_setup(); |
nexpaq | 0:b86eda0e990d | 104 | #ifdef DBG_MSG |
nexpaq | 0:b86eda0e990d | 105 | printf("NP System Initialized\n\r"); |
nexpaq | 0:b86eda0e990d | 106 | #endif |
nexpaq | 0:b86eda0e990d | 107 | } |
nexpaq | 0:b86eda0e990d | 108 | |
nexpaq | 0:b86eda0e990d | 109 | /* |
nexpaq | 0:b86eda0e990d | 110 | * Description: signal when system is ready |
nexpaq | 0:b86eda0e990d | 111 | * Parameter : null |
nexpaq | 0:b86eda0e990d | 112 | * Return : null |
nexpaq | 0:b86eda0e990d | 113 | */ |
nexpaq | 0:b86eda0e990d | 114 | void np_sys_start() |
nexpaq | 0:b86eda0e990d | 115 | { |
nexpaq | 0:b86eda0e990d | 116 | uint8_t answer = 0; |
nexpaq | 0:b86eda0e990d | 117 | np_function_ncn_interface_post_message(RSP_INTO_APP, &answer, 1); |
nexpaq | 0:b86eda0e990d | 118 | flag_jump_bsl = 0; |
nexpaq | 0:b86eda0e990d | 119 | #ifdef DBG_MSG |
nexpaq | 0:b86eda0e990d | 120 | printf("NP System Started\n\r"); |
nexpaq | 0:b86eda0e990d | 121 | #endif |
nexpaq | 0:b86eda0e990d | 122 | } |
nexpaq | 0:b86eda0e990d | 123 | |
nexpaq | 0:b86eda0e990d | 124 | /* |
nexpaq | 0:b86eda0e990d | 125 | * Description: function to check and jump to boot loader |
nexpaq | 0:b86eda0e990d | 126 | * Parameter : null |
nexpaq | 0:b86eda0e990d | 127 | * Return : null |
nexpaq | 0:b86eda0e990d | 128 | */ |
nexpaq | 0:b86eda0e990d | 129 | #ifdef TOOLCHAIN_ARM_STD |
nexpaq | 0:b86eda0e990d | 130 | register int _r0 __asm("r0"); |
nexpaq | 0:b86eda0e990d | 131 | register int _pc __asm("pc"); |
nexpaq | 0:b86eda0e990d | 132 | #endif |
nexpaq | 0:b86eda0e990d | 133 | |
nexpaq | 0:b86eda0e990d | 134 | void np_sys_bsl_chk() |
nexpaq | 0:b86eda0e990d | 135 | { |
nexpaq | 0:b86eda0e990d | 136 | if( flag_jump_bsl > 0x00 ) { |
nexpaq | 0:b86eda0e990d | 137 | flag_jump_bsl = 0x00; |
nexpaq | 0:b86eda0e990d | 138 | np_system_disable_interrupt(); |
nexpaq | 0:b86eda0e990d | 139 | #ifdef DBG_MSG |
nexpaq | 0:b86eda0e990d | 140 | printf("Entering Bootloader\n\r"); |
nexpaq | 0:b86eda0e990d | 141 | #endif |
nexpaq | 0:b86eda0e990d | 142 | #ifdef TOOLCHAIN_ARM_STD |
nexpaq | 0:b86eda0e990d | 143 | __asm { |
nexpaq | 0:b86eda0e990d | 144 | mov _r0, #0x20000008 |
nexpaq | 0:b86eda0e990d | 145 | ldr _pc, [_r0] |
nexpaq | 0:b86eda0e990d | 146 | } |
nexpaq | 0:b86eda0e990d | 147 | } |
nexpaq | 0:b86eda0e990d | 148 | __asm { |
nexpaq | 0:b86eda0e990d | 149 | mov _r0, _r0 |
nexpaq | 0:b86eda0e990d | 150 | mov _r0, _r0 |
nexpaq | 0:b86eda0e990d | 151 | } |
nexpaq | 0:b86eda0e990d | 152 | #else |
nexpaq | 0:b86eda0e990d | 153 | __asm volatile( |
nexpaq | 0:b86eda0e990d | 154 | " LDR R0, =0x20000008 \n" |
nexpaq | 0:b86eda0e990d | 155 | " LDR PC, [R0] \n" |
nexpaq | 0:b86eda0e990d | 156 | ); |
nexpaq | 0:b86eda0e990d | 157 | } |
nexpaq | 0:b86eda0e990d | 158 | __asm volatile("nop \n"); |
nexpaq | 0:b86eda0e990d | 159 | __asm volatile("nop \n"); |
nexpaq | 0:b86eda0e990d | 160 | #endif |
nexpaq | 0:b86eda0e990d | 161 | } |
nexpaq | 0:b86eda0e990d | 162 | |
nexpaq | 0:b86eda0e990d | 163 | /* |
nexpaq | 0:b86eda0e990d | 164 | * Description: system loop,software will run the function forever when software is on app mode. |
nexpaq | 0:b86eda0e990d | 165 | * Parameter : null |
nexpaq | 0:b86eda0e990d | 166 | * Return : null |
nexpaq | 0:b86eda0e990d | 167 | */ |
nexpaq | 0:b86eda0e990d | 168 | void np_system_loop(app_function np_api_loop) |
nexpaq | 0:b86eda0e990d | 169 | { |
nexpaq | 0:b86eda0e990d | 170 | while(1) { |
nexpaq | 0:b86eda0e990d | 171 | np_api_loop(); |
nexpaq | 0:b86eda0e990d | 172 | //jumping to the bootloader |
nexpaq | 0:b86eda0e990d | 173 | if( flag_jump_bsl > 0x00 ) { |
nexpaq | 0:b86eda0e990d | 174 | flag_jump_bsl = 0x00; |
nexpaq | 0:b86eda0e990d | 175 | np_system_disable_interrupt(); |
nexpaq | 0:b86eda0e990d | 176 | #ifdef DBG_MSG |
nexpaq | 0:b86eda0e990d | 177 | printf("Entering NP Bootloader\n\r"); |
nexpaq | 0:b86eda0e990d | 178 | #endif |
nexpaq | 0:b86eda0e990d | 179 | #ifdef TOOLCHAIN_ARM_STD |
nexpaq | 0:b86eda0e990d | 180 | __asm { |
nexpaq | 0:b86eda0e990d | 181 | mov _r0, #0x20000008 |
nexpaq | 0:b86eda0e990d | 182 | ldr _pc, [_r0] |
nexpaq | 0:b86eda0e990d | 183 | } |
nexpaq | 0:b86eda0e990d | 184 | } |
nexpaq | 0:b86eda0e990d | 185 | __asm { |
nexpaq | 0:b86eda0e990d | 186 | mov _r0, _r0 |
nexpaq | 0:b86eda0e990d | 187 | mov _r0, _r0 |
nexpaq | 0:b86eda0e990d | 188 | } |
nexpaq | 0:b86eda0e990d | 189 | #else |
nexpaq | 0:b86eda0e990d | 190 | __asm volatile( |
nexpaq | 0:b86eda0e990d | 191 | " LDR R0, =0x20000008 \n" |
nexpaq | 0:b86eda0e990d | 192 | " LDR PC, [R0] \n" |
nexpaq | 0:b86eda0e990d | 193 | ); |
nexpaq | 0:b86eda0e990d | 194 | } |
nexpaq | 0:b86eda0e990d | 195 | __asm volatile("nop \n"); |
nexpaq | 0:b86eda0e990d | 196 | __asm volatile("nop \n"); |
nexpaq | 0:b86eda0e990d | 197 | #endif |
nexpaq | 0:b86eda0e990d | 198 | } |
nexpaq | 0:b86eda0e990d | 199 | } |
nexpaq | 0:b86eda0e990d | 200 |