parent
							
								
									30e6e83107
								
							
						
					
					
						commit
						67ccf4c1d9
					
				| @ -0,0 +1,3 @@ | |||||||
|  | ifndef MAKEFILE_INCLUDED | ||||||
|  | 	include ../../Makefile | ||||||
|  | endif | ||||||
| @ -0,0 +1,524 @@ | |||||||
|  | /*
 | ||||||
|  |     ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio | ||||||
|  | 
 | ||||||
|  |     Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |     you may not use this file except in compliance with the License. | ||||||
|  |     You may obtain a copy of the License at | ||||||
|  | 
 | ||||||
|  |         http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  | 
 | ||||||
|  |     Unless required by applicable law or agreed to in writing, software | ||||||
|  |     distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |     See the License for the specific language governing permissions and | ||||||
|  |     limitations under the License. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @file    templates/chconf.h | ||||||
|  |  * @brief   Configuration file template. | ||||||
|  |  * @details A copy of this file must be placed in each project directory, it | ||||||
|  |  *          contains the application specific kernel settings. | ||||||
|  |  * | ||||||
|  |  * @addtogroup config | ||||||
|  |  * @details Kernel related settings and hooks. | ||||||
|  |  * @{ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef CHCONF_H | ||||||
|  | #define CHCONF_H | ||||||
|  | 
 | ||||||
|  | #define _CHIBIOS_RT_CONF_ | ||||||
|  | 
 | ||||||
|  | /*===========================================================================*/ | ||||||
|  | /**
 | ||||||
|  |  * @name System timers settings | ||||||
|  |  * @{ | ||||||
|  |  */ | ||||||
|  | /*===========================================================================*/ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   System time counter resolution. | ||||||
|  |  * @note    Allowed values are 16 or 32 bits. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_ST_RESOLUTION                32 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   System tick frequency. | ||||||
|  |  * @details Frequency of the system timer that drives the system ticks. This | ||||||
|  |  *          setting also defines the system tick time unit. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_ST_FREQUENCY                 1000 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Time delta constant for the tick-less mode. | ||||||
|  |  * @note    If this value is zero then the system uses the classic | ||||||
|  |  *          periodic tick. This value represents the minimum number | ||||||
|  |  *          of ticks that is safe to specify in a timeout directive. | ||||||
|  |  *          The value one is not valid, timeouts are rounded up to | ||||||
|  |  *          this value. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_ST_TIMEDELTA                 0 | ||||||
|  | 
 | ||||||
|  | /** @} */ | ||||||
|  | 
 | ||||||
|  | /*===========================================================================*/ | ||||||
|  | /**
 | ||||||
|  |  * @name Kernel parameters and options | ||||||
|  |  * @{ | ||||||
|  |  */ | ||||||
|  | /*===========================================================================*/ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Round robin interval. | ||||||
|  |  * @details This constant is the number of system ticks allowed for the | ||||||
|  |  *          threads before preemption occurs. Setting this value to zero | ||||||
|  |  *          disables the preemption for threads with equal priority and the | ||||||
|  |  *          round robin becomes cooperative. Note that higher priority | ||||||
|  |  *          threads can still preempt, the kernel is always preemptive. | ||||||
|  |  * @note    Disabling the round robin preemption makes the kernel more compact | ||||||
|  |  *          and generally faster. | ||||||
|  |  * @note    The round robin preemption is not supported in tickless mode and | ||||||
|  |  *          must be set to zero in that case. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_TIME_QUANTUM                 20 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Managed RAM size. | ||||||
|  |  * @details Size of the RAM area to be managed by the OS. If set to zero | ||||||
|  |  *          then the whole available RAM is used. The core memory is made | ||||||
|  |  *          available to the heap allocator and/or can be used directly through | ||||||
|  |  *          the simplified core memory allocator. | ||||||
|  |  * | ||||||
|  |  * @note    In order to let the OS manage the whole RAM the linker script must | ||||||
|  |  *          provide the @p __heap_base__ and @p __heap_end__ symbols. | ||||||
|  |  * @note    Requires @p CH_CFG_USE_MEMCORE. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_MEMCORE_SIZE                 0 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Idle thread automatic spawn suppression. | ||||||
|  |  * @details When this option is activated the function @p chSysInit() | ||||||
|  |  *          does not spawn the idle thread. The application @p main() | ||||||
|  |  *          function becomes the idle thread and must implement an | ||||||
|  |  *          infinite loop. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_NO_IDLE_THREAD               FALSE | ||||||
|  | 
 | ||||||
|  | /* Use __WFI in the idle thread for waiting. Does lower the power
 | ||||||
|  |  * consumption. */ | ||||||
|  | #define CORTEX_ENABLE_WFI_IDLE              TRUE | ||||||
|  | 
 | ||||||
|  | /** @} */ | ||||||
|  | 
 | ||||||
|  | /*===========================================================================*/ | ||||||
|  | /**
 | ||||||
|  |  * @name Performance options | ||||||
|  |  * @{ | ||||||
|  |  */ | ||||||
|  | /*===========================================================================*/ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   OS optimization. | ||||||
|  |  * @details If enabled then time efficient rather than space efficient code | ||||||
|  |  *          is used when two possible implementations exist. | ||||||
|  |  * | ||||||
|  |  * @note    This is not related to the compiler optimization options. | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_OPTIMIZE_SPEED               TRUE | ||||||
|  | 
 | ||||||
|  | /** @} */ | ||||||
|  | 
 | ||||||
|  | /*===========================================================================*/ | ||||||
|  | /**
 | ||||||
|  |  * @name Subsystem options | ||||||
|  |  * @{ | ||||||
|  |  */ | ||||||
|  | /*===========================================================================*/ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Time Measurement APIs. | ||||||
|  |  * @details If enabled then the time measurement APIs are included in | ||||||
|  |  *          the kernel. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_TM                       FALSE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Threads registry APIs. | ||||||
|  |  * @details If enabled then the registry APIs are included in the kernel. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_REGISTRY                 TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Threads synchronization APIs. | ||||||
|  |  * @details If enabled then the @p chThdWait() function is included in | ||||||
|  |  *          the kernel. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_WAITEXIT                 TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Semaphores APIs. | ||||||
|  |  * @details If enabled then the Semaphores APIs are included in the kernel. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_SEMAPHORES               TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Semaphores queuing mode. | ||||||
|  |  * @details If enabled then the threads are enqueued on semaphores by | ||||||
|  |  *          priority rather than in FIFO order. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p FALSE. Enable this if you have special | ||||||
|  |  *          requirements. | ||||||
|  |  * @note    Requires @p CH_CFG_USE_SEMAPHORES. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_SEMAPHORES_PRIORITY      FALSE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Mutexes APIs. | ||||||
|  |  * @details If enabled then the mutexes APIs are included in the kernel. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_MUTEXES                  TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables recursive behavior on mutexes. | ||||||
|  |  * @note    Recursive mutexes are heavier and have an increased | ||||||
|  |  *          memory footprint. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p FALSE. | ||||||
|  |  * @note    Requires @p CH_CFG_USE_MUTEXES. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_MUTEXES_RECURSIVE        FALSE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Conditional Variables APIs. | ||||||
|  |  * @details If enabled then the conditional variables APIs are included | ||||||
|  |  *          in the kernel. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  * @note    Requires @p CH_CFG_USE_MUTEXES. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_CONDVARS                 TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Conditional Variables APIs with timeout. | ||||||
|  |  * @details If enabled then the conditional variables APIs with timeout | ||||||
|  |  *          specification are included in the kernel. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  * @note    Requires @p CH_CFG_USE_CONDVARS. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_CONDVARS_TIMEOUT         TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Events Flags APIs. | ||||||
|  |  * @details If enabled then the event flags APIs are included in the kernel. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_EVENTS                   TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Events Flags APIs with timeout. | ||||||
|  |  * @details If enabled then the events APIs with timeout specification | ||||||
|  |  *          are included in the kernel. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  * @note    Requires @p CH_CFG_USE_EVENTS. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_EVENTS_TIMEOUT           TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Synchronous Messages APIs. | ||||||
|  |  * @details If enabled then the synchronous messages APIs are included | ||||||
|  |  *          in the kernel. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_MESSAGES                 TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Synchronous Messages queuing mode. | ||||||
|  |  * @details If enabled then messages are served by priority rather than in | ||||||
|  |  *          FIFO order. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p FALSE. Enable this if you have special | ||||||
|  |  *          requirements. | ||||||
|  |  * @note    Requires @p CH_CFG_USE_MESSAGES. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_MESSAGES_PRIORITY        FALSE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Mailboxes APIs. | ||||||
|  |  * @details If enabled then the asynchronous messages (mailboxes) APIs are | ||||||
|  |  *          included in the kernel. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  * @note    Requires @p CH_CFG_USE_SEMAPHORES. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_MAILBOXES                TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Core Memory Manager APIs. | ||||||
|  |  * @details If enabled then the core memory manager APIs are included | ||||||
|  |  *          in the kernel. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_MEMCORE                  TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Heap Allocator APIs. | ||||||
|  |  * @details If enabled then the memory heap allocator APIs are included | ||||||
|  |  *          in the kernel. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  * @note    Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or | ||||||
|  |  *          @p CH_CFG_USE_SEMAPHORES. | ||||||
|  |  * @note    Mutexes are recommended. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_HEAP                     TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Memory Pools Allocator APIs. | ||||||
|  |  * @details If enabled then the memory pools allocator APIs are included | ||||||
|  |  *          in the kernel. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_MEMPOOLS                 TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Dynamic Threads APIs. | ||||||
|  |  * @details If enabled then the dynamic threads creation APIs are included | ||||||
|  |  *          in the kernel. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p TRUE. | ||||||
|  |  * @note    Requires @p CH_CFG_USE_WAITEXIT. | ||||||
|  |  * @note    Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_USE_DYNAMIC                  TRUE | ||||||
|  | 
 | ||||||
|  | /** @} */ | ||||||
|  | 
 | ||||||
|  | /*===========================================================================*/ | ||||||
|  | /**
 | ||||||
|  |  * @name Debug options | ||||||
|  |  * @{ | ||||||
|  |  */ | ||||||
|  | /*===========================================================================*/ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Debug option, kernel statistics. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p FALSE. | ||||||
|  |  */ | ||||||
|  | #define CH_DBG_STATISTICS                   FALSE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Debug option, system state check. | ||||||
|  |  * @details If enabled the correct call protocol for system APIs is checked | ||||||
|  |  *          at runtime. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p FALSE. | ||||||
|  |  */ | ||||||
|  | #define CH_DBG_SYSTEM_STATE_CHECK           TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Debug option, parameters checks. | ||||||
|  |  * @details If enabled then the checks on the API functions input | ||||||
|  |  *          parameters are activated. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p FALSE. | ||||||
|  |  */ | ||||||
|  | #define CH_DBG_ENABLE_CHECKS                TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Debug option, consistency checks. | ||||||
|  |  * @details If enabled then all the assertions in the kernel code are | ||||||
|  |  *          activated. This includes consistency checks inside the kernel, | ||||||
|  |  *          runtime anomalies and port-defined checks. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p FALSE. | ||||||
|  |  */ | ||||||
|  | #define CH_DBG_ENABLE_ASSERTS               TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Debug option, trace buffer. | ||||||
|  |  * @details If enabled then the trace buffer is activated. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p CH_DBG_TRACE_MASK_DISABLED. | ||||||
|  |  */ | ||||||
|  | #define CH_DBG_TRACE_MASK                   CH_DBG_TRACE_MASK_DISABLED | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Trace buffer entries. | ||||||
|  |  * @note    The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is | ||||||
|  |  *          different from @p CH_DBG_TRACE_MASK_DISABLED. | ||||||
|  |  */ | ||||||
|  | #define CH_DBG_TRACE_BUFFER_SIZE            128 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Debug option, stack checks. | ||||||
|  |  * @details If enabled then a runtime stack check is performed. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p FALSE. | ||||||
|  |  * @note    The stack check is performed in a architecture/port dependent way. | ||||||
|  |  *          It may not be implemented or some ports. | ||||||
|  |  * @note    The default failure mode is to halt the system with the global | ||||||
|  |  *          @p panic_msg variable set to @p NULL. | ||||||
|  |  */ | ||||||
|  | #define CH_DBG_ENABLE_STACK_CHECK           TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Debug option, stacks initialization. | ||||||
|  |  * @details If enabled then the threads working area is filled with a byte | ||||||
|  |  *          value when a thread is created. This can be useful for the | ||||||
|  |  *          runtime measurement of the used stack. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p FALSE. | ||||||
|  |  */ | ||||||
|  | #define CH_DBG_FILL_THREADS                 TRUE | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Debug option, threads profiling. | ||||||
|  |  * @details If enabled then a field is added to the @p thread_t structure that | ||||||
|  |  *          counts the system ticks occurred while executing the thread. | ||||||
|  |  * | ||||||
|  |  * @note    The default is @p FALSE. | ||||||
|  |  * @note    This debug option is not currently compatible with the | ||||||
|  |  *          tickless mode. | ||||||
|  |  */ | ||||||
|  | #define CH_DBG_THREADS_PROFILING            FALSE | ||||||
|  | 
 | ||||||
|  | /** @} */ | ||||||
|  | 
 | ||||||
|  | /*===========================================================================*/ | ||||||
|  | /**
 | ||||||
|  |  * @name Kernel hooks | ||||||
|  |  * @{ | ||||||
|  |  */ | ||||||
|  | /*===========================================================================*/ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Threads descriptor structure extension. | ||||||
|  |  * @details User fields added to the end of the @p thread_t structure. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_THREAD_EXTRA_FIELDS                                          \ | ||||||
|  |   /* Add threads custom fields here.*/ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Threads initialization hook. | ||||||
|  |  * @details User initialization code added to the @p chThdInit() API. | ||||||
|  |  * | ||||||
|  |  * @note    It is invoked from within @p chThdInit() and implicitly from all | ||||||
|  |  *          the threads creation APIs. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_THREAD_INIT_HOOK(tp) {                                       \ | ||||||
|  |   /* Add threads initialization code here.*/                                \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Threads finalization hook. | ||||||
|  |  * @details User finalization code added to the @p chThdExit() API. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_THREAD_EXIT_HOOK(tp) {                                       \ | ||||||
|  |   /* Add threads finalization code here.*/                                  \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Context switch hook. | ||||||
|  |  * @details This hook is invoked just before switching between threads. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \ | ||||||
|  |   /* Context switch code here.*/                                            \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   ISR enter hook. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_IRQ_PROLOGUE_HOOK() {                                        \ | ||||||
|  |   /* IRQ prologue code here.*/                                              \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   ISR exit hook. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_IRQ_EPILOGUE_HOOK() {                                        \ | ||||||
|  |   /* IRQ epilogue code here.*/                                              \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Idle thread enter hook. | ||||||
|  |  * @note    This hook is invoked within a critical zone, no OS functions | ||||||
|  |  *          should be invoked from here. | ||||||
|  |  * @note    This macro can be used to activate a power saving mode. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_IDLE_ENTER_HOOK() {                                          \ | ||||||
|  |   /* Idle-enter code here.*/                                                \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Idle thread leave hook. | ||||||
|  |  * @note    This hook is invoked within a critical zone, no OS functions | ||||||
|  |  *          should be invoked from here. | ||||||
|  |  * @note    This macro can be used to deactivate a power saving mode. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_IDLE_LEAVE_HOOK() {                                          \ | ||||||
|  |   /* Idle-leave code here.*/                                                \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Idle Loop hook. | ||||||
|  |  * @details This hook is continuously invoked by the idle thread loop. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_IDLE_LOOP_HOOK() {                                           \ | ||||||
|  |   /* Idle loop code here.*/                                                 \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   System tick event hook. | ||||||
|  |  * @details This hook is invoked in the system tick handler immediately | ||||||
|  |  *          after processing the virtual timers queue. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_SYSTEM_TICK_HOOK() {                                         \ | ||||||
|  |   /* System tick event code here.*/                                         \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   System halt hook. | ||||||
|  |  * @details This hook is invoked in case to a system halting error before | ||||||
|  |  *          the system is halted. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_SYSTEM_HALT_HOOK(reason) {                                   \ | ||||||
|  |   /* System halt code here.*/                                               \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Trace hook. | ||||||
|  |  * @details This hook is invoked each time a new record is written in the | ||||||
|  |  *          trace buffer. | ||||||
|  |  */ | ||||||
|  | #define CH_CFG_TRACE_HOOK(tep) {                                            \ | ||||||
|  |   /* Trace code here.*/                                                     \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** @} */ | ||||||
|  | 
 | ||||||
|  | /*===========================================================================*/ | ||||||
|  | /* Port-specific settings (override port settings defaulted in chcore.h).    */ | ||||||
|  | /*===========================================================================*/ | ||||||
|  | 
 | ||||||
|  | #endif  /* CHCONF_H */ | ||||||
|  | 
 | ||||||
|  | /** @} */ | ||||||
| @ -0,0 +1,69 @@ | |||||||
|  | /*
 | ||||||
|  | Copyright 2015 Jun Wako <wakojun@gmail.com> | ||||||
|  | 
 | ||||||
|  | This program is free software: you can redistribute it and/or modify | ||||||
|  | it under the terms of the GNU General Public License as published by | ||||||
|  | the Free Software Foundation, either version 2 of the License, or | ||||||
|  | (at your option) any later version. | ||||||
|  | 
 | ||||||
|  | This program is distributed in the hope that it will be useful, | ||||||
|  | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | GNU General Public License for more details. | ||||||
|  | 
 | ||||||
|  | You should have received a copy of the GNU General Public License | ||||||
|  | along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | #ifndef CONFIG_H | ||||||
|  | #define CONFIG_H | ||||||
|  | 
 | ||||||
|  | /* USB Device descriptor parameter */ | ||||||
|  | #define VENDOR_ID       0xFEED | ||||||
|  | #define PRODUCT_ID      0x6464 | ||||||
|  | #define DEVICE_VER      0x0001 | ||||||
|  | /* in python2: list(u"whatever".encode('utf-16-le')) */ | ||||||
|  | /*   at most 32 characters or the ugly hack in usb_main.c borks */ | ||||||
|  | #define MANUFACTURER "QMK" | ||||||
|  | #define USBSTR_MANUFACTURER    'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00', '\xc6', '\x00' | ||||||
|  | #define PRODUCT "ChibiOS QMK test" | ||||||
|  | #define USBSTR_PRODUCT         'C', '\x00', 'h', '\x00', 'i', '\x00', 'b', '\x00', 'i', '\x00', 'O', '\x00', 'S', '\x00', ' ', '\x00', 'Q', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00', 't', '\x00', 'e', '\x00', 's', '\x00', 't', '\x00' | ||||||
|  | #define DESCRIPTION "QMK keyboard firmware test for ChibiOS" | ||||||
|  | 
 | ||||||
|  | /* key matrix size */ | ||||||
|  | #define MATRIX_ROWS 4 | ||||||
|  | #define MATRIX_COLS 3 | ||||||
|  | #define DIODE_DIRECTION ROW2COL | ||||||
|  | 
 | ||||||
|  | /* Set 0 if debouncing isn't needed */ | ||||||
|  | #define DEBOUNCE    5 | ||||||
|  | 
 | ||||||
|  | /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ | ||||||
|  | #define LOCKING_SUPPORT_ENABLE | ||||||
|  | /* Locking resynchronize hack */ | ||||||
|  | #define LOCKING_RESYNC_ENABLE | ||||||
|  | 
 | ||||||
|  | /* key combination for command */ | ||||||
|  | #define IS_COMMAND() ( \ | ||||||
|  |     keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Feature disable options | ||||||
|  |  *  These options are also useful to firmware size reduction. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /* disable debug print */ | ||||||
|  | //#define NO_DEBUG
 | ||||||
|  | 
 | ||||||
|  | /* disable print */ | ||||||
|  | //#define NO_PRINT
 | ||||||
|  | 
 | ||||||
|  | /* disable action features */ | ||||||
|  | //#define NO_ACTION_LAYER
 | ||||||
|  | //#define NO_ACTION_TAPPING
 | ||||||
|  | //#define NO_ACTION_ONESHOT
 | ||||||
|  | //#define NO_ACTION_MACRO
 | ||||||
|  | //#define NO_ACTION_FUNCTION
 | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
| @ -0,0 +1,187 @@ | |||||||
|  | /*
 | ||||||
|  |     ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio | ||||||
|  | 
 | ||||||
|  |     Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |     you may not use this file except in compliance with the License. | ||||||
|  |     You may obtain a copy of the License at | ||||||
|  | 
 | ||||||
|  |         http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  | 
 | ||||||
|  |     Unless required by applicable law or agreed to in writing, software | ||||||
|  |     distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |     See the License for the specific language governing permissions and | ||||||
|  |     limitations under the License. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @file    templates/halconf.h | ||||||
|  |  * @brief   HAL configuration header. | ||||||
|  |  * @details HAL configuration file, this file allows to enable or disable the | ||||||
|  |  *          various device drivers from your application. You may also use | ||||||
|  |  *          this file in order to override the device drivers default settings. | ||||||
|  |  * | ||||||
|  |  * @addtogroup HAL_CONF | ||||||
|  |  * @{ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef _HALCONF_H_ | ||||||
|  | #define _HALCONF_H_ | ||||||
|  | 
 | ||||||
|  | #include "mcuconf.h" | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the PAL subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_PAL) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_PAL                 TRUE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the ADC subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_ADC) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_ADC                 FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the CAN subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_CAN) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_CAN                 FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the DAC subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_DAC                 FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the EXT subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_EXT) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_EXT                 FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the GPT subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_GPT) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_GPT                 FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the I2C subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_I2C                 FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the I2S subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_I2S) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_I2S                 FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the ICU subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_ICU) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_ICU                 FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the MAC subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_MAC) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_MAC                 FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the MMC_SPI subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_MMC_SPI             FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the PWM subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_PWM) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_PWM                 FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the RTC subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_RTC                 FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the SDC subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_SDC) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_SDC                 FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the SERIAL subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_SERIAL              FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the SERIAL over USB subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_SERIAL_USB          FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the SPI subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_SPI                 FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the UART subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_UART) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_UART                FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the USB subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_USB) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_USB                 TRUE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables the WDG subsystem. | ||||||
|  |  */ | ||||||
|  | #if !defined(HAL_USE_WDG) || defined(__DOXYGEN__) | ||||||
|  | #define HAL_USE_WDG                 FALSE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*===========================================================================*/ | ||||||
|  | /* USB driver related settings.                                              */ | ||||||
|  | /*===========================================================================*/ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief   Enables synchronous APIs. | ||||||
|  |  * @note    Disabling this option saves both code and data space. | ||||||
|  |  */ | ||||||
|  | #if !defined(USB_USE_WAIT) || defined(__DOXYGEN__) | ||||||
|  | #define USB_USE_WAIT                TRUE | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif /* _HALCONF_H_ */ | ||||||
|  | 
 | ||||||
|  | /** @} */ | ||||||
| @ -0,0 +1,25 @@ | |||||||
|  | /*
 | ||||||
|  | Copyright 2012,2013 Jun Wako <wakojun@gmail.com> | ||||||
|  | 
 | ||||||
|  | This program is free software: you can redistribute it and/or modify | ||||||
|  | it under the terms of the GNU General Public License as published by | ||||||
|  | the Free Software Foundation, either version 2 of the License, or | ||||||
|  | (at your option) any later version. | ||||||
|  | 
 | ||||||
|  | This program is distributed in the hope that it will be useful, | ||||||
|  | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | GNU General Public License for more details. | ||||||
|  | 
 | ||||||
|  | You should have received a copy of the GNU General Public License | ||||||
|  | along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | #include "teensy_lc_synth.h" | ||||||
|  | 
 | ||||||
|  | const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||||
|  |     KEYMAP( | ||||||
|  |            KC_1, KC_2,       KC_3, KC_4, KC_5, \ | ||||||
|  |         KC_C, KC_D, KC_E, KC_F, KC_G, KC_A, KC_B \ | ||||||
|  |     ) | ||||||
|  | }; | ||||||
| @ -0,0 +1,105 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com | ||||||
|  |  *           (C) 2016 flabbergast <s3+flabbergast@sdfeu.org> | ||||||
|  |  * | ||||||
|  |  * Permission is hereby granted, free of charge, to any person obtaining | ||||||
|  |  * a copy of this software and associated documentation files (the "Software"), | ||||||
|  |  * to deal in the Software without restriction, including without limitation | ||||||
|  |  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||||
|  |  * and/or sell copies of the Software, and to permit persons to whom the | ||||||
|  |  * Software is furnished to do so, subject to the following conditions: | ||||||
|  |  * | ||||||
|  |  * The above copyright notice and this permission notice shall be included in | ||||||
|  |  * all copies or substantial portions of the Software. | ||||||
|  |  * | ||||||
|  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||||
|  |  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||||
|  |  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||||
|  |  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||||
|  |  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||||
|  |  * SOFTWARE. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /* | ||||||
|  |  * KL26Z64 memory setup. | ||||||
|  |  */ | ||||||
|  | MEMORY | ||||||
|  | { | ||||||
|  |   flash0   : org = 0x00000000, len = 0x100 | ||||||
|  |   flash1   : org = 0x00000400, len = 0x10 | ||||||
|  |   flash2   : org = 0x00000410, len = 62k - 0x410 | ||||||
|  |   flash3   : org = 0x0000F800, len = 2k | ||||||
|  |   flash4   : org = 0x00000000, len = 0 | ||||||
|  |   flash5   : org = 0x00000000, len = 0 | ||||||
|  |   flash6   : org = 0x00000000, len = 0 | ||||||
|  |   flash7   : org = 0x00000000, len = 0 | ||||||
|  |   ram0     : org = 0x1FFFF800, len = 8k | ||||||
|  |   ram1     : org = 0x00000000, len = 0 | ||||||
|  |   ram2     : org = 0x00000000, len = 0 | ||||||
|  |   ram3     : org = 0x00000000, len = 0 | ||||||
|  |   ram4     : org = 0x00000000, len = 0 | ||||||
|  |   ram5     : org = 0x00000000, len = 0 | ||||||
|  |   ram6     : org = 0x00000000, len = 0 | ||||||
|  |   ram7     : org = 0x00000000, len = 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Flash region for the configuration bytes.*/ | ||||||
|  | SECTIONS | ||||||
|  | { | ||||||
|  |   .cfmprotect : ALIGN(4) SUBALIGN(4) | ||||||
|  |   { | ||||||
|  |     KEEP(*(.cfmconfig)) | ||||||
|  |   } > flash1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* For each data/text section two region are defined, a virtual region | ||||||
|  |    and a load region (_LMA suffix).*/ | ||||||
|  | 
 | ||||||
|  | /* Flash region to be used for exception vectors.*/ | ||||||
|  | REGION_ALIAS("VECTORS_FLASH", flash0); | ||||||
|  | REGION_ALIAS("VECTORS_FLASH_LMA", flash0); | ||||||
|  | 
 | ||||||
|  | /* Flash region to be used for constructors and destructors.*/ | ||||||
|  | REGION_ALIAS("XTORS_FLASH", flash2); | ||||||
|  | REGION_ALIAS("XTORS_FLASH_LMA", flash2); | ||||||
|  | 
 | ||||||
|  | /* Flash region to be used for code text.*/ | ||||||
|  | REGION_ALIAS("TEXT_FLASH", flash2); | ||||||
|  | REGION_ALIAS("TEXT_FLASH_LMA", flash2); | ||||||
|  | 
 | ||||||
|  | /* Flash region to be used for read only data.*/ | ||||||
|  | REGION_ALIAS("RODATA_FLASH", flash2); | ||||||
|  | REGION_ALIAS("RODATA_FLASH_LMA", flash2); | ||||||
|  | 
 | ||||||
|  | /* Flash region to be used for various.*/ | ||||||
|  | REGION_ALIAS("VARIOUS_FLASH", flash2); | ||||||
|  | REGION_ALIAS("VARIOUS_FLASH_LMA", flash2); | ||||||
|  | 
 | ||||||
|  | /* Flash region to be used for RAM(n) initialization data.*/ | ||||||
|  | REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2); | ||||||
|  | 
 | ||||||
|  | /* RAM region to be used for Main stack. This stack accommodates the processing | ||||||
|  |    of all exceptions and interrupts.*/ | ||||||
|  | REGION_ALIAS("MAIN_STACK_RAM", ram0); | ||||||
|  | 
 | ||||||
|  | /* RAM region to be used for the process stack. This is the stack used by | ||||||
|  |    the main() function.*/ | ||||||
|  | REGION_ALIAS("PROCESS_STACK_RAM", ram0); | ||||||
|  | 
 | ||||||
|  | /* RAM region to be used for data segment.*/ | ||||||
|  | REGION_ALIAS("DATA_RAM", ram0); | ||||||
|  | REGION_ALIAS("DATA_RAM_LMA", flash2); | ||||||
|  | 
 | ||||||
|  | /* RAM region to be used for BSS segment.*/ | ||||||
|  | REGION_ALIAS("BSS_RAM", ram0); | ||||||
|  | 
 | ||||||
|  | /* RAM region to be used for the default heap.*/ | ||||||
|  | REGION_ALIAS("HEAP_RAM", ram0); | ||||||
|  | 
 | ||||||
|  | __eeprom_workarea_start__ = ORIGIN(flash3); | ||||||
|  | __eeprom_workarea_size__  = LENGTH(flash3); | ||||||
|  | __eeprom_workarea_end__   = __eeprom_workarea_start__ + __eeprom_workarea_size__; | ||||||
|  | 
 | ||||||
|  | /* Generic rules inclusion.*/ | ||||||
|  | INCLUDE rules.ld | ||||||
| @ -0,0 +1,32 @@ | |||||||
|  | /*
 | ||||||
|  | Copyright 2012 Jun Wako <wakojun@gmail.com> | ||||||
|  | 
 | ||||||
|  | This program is free software: you can redistribute it and/or modify | ||||||
|  | it under the terms of the GNU General Public License as published by | ||||||
|  | the Free Software Foundation, either version 2 of the License, or | ||||||
|  | (at your option) any later version. | ||||||
|  | 
 | ||||||
|  | This program is distributed in the hope that it will be useful, | ||||||
|  | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | GNU General Public License for more details. | ||||||
|  | 
 | ||||||
|  | You should have received a copy of the GNU General Public License | ||||||
|  | along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | #include "hal.h" | ||||||
|  | 
 | ||||||
|  | #include "led.h" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | void led_set(uint8_t usb_led) { | ||||||
|  |     if (usb_led & (1<<USB_LED_CAPS_LOCK)) { | ||||||
|  |         // output high
 | ||||||
|  |         palSetPadMode(TEENSY_PIN13_IOPORT, TEENSY_PIN13, PAL_MODE_OUTPUT_PUSHPULL); | ||||||
|  |         palSetPad(TEENSY_PIN13_IOPORT, TEENSY_PIN13); | ||||||
|  |     } else { | ||||||
|  |         // Hi-Z
 | ||||||
|  |         palSetPadMode(TEENSY_PIN13_IOPORT, TEENSY_PIN13, PAL_MODE_INPUT); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,183 @@ | |||||||
|  | /*
 | ||||||
|  | Copyright 2012 Jun Wako <wakojun@gmail.com> | ||||||
|  | 
 | ||||||
|  | This program is free software: you can redistribute it and/or modify | ||||||
|  | it under the terms of the GNU General Public License as published by | ||||||
|  | the Free Software Foundation, either version 2 of the License, or | ||||||
|  | (at your option) any later version. | ||||||
|  | 
 | ||||||
|  | This program is distributed in the hope that it will be useful, | ||||||
|  | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | GNU General Public License for more details. | ||||||
|  | 
 | ||||||
|  | You should have received a copy of the GNU General Public License | ||||||
|  | along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | #include "ch.h" | ||||||
|  | #include "hal.h" | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * scan matrix | ||||||
|  |  */ | ||||||
|  | #include "print.h" | ||||||
|  | #include "debug.h" | ||||||
|  | #include "util.h" | ||||||
|  | #include "matrix.h" | ||||||
|  | #include "wait.h" | ||||||
|  | 
 | ||||||
|  | #ifndef DEBOUNCE | ||||||
|  | #   define DEBOUNCE 5 | ||||||
|  | #endif | ||||||
|  | static uint8_t debouncing = DEBOUNCE; | ||||||
|  | 
 | ||||||
|  | /* matrix state(1:on, 0:off) */ | ||||||
|  | static matrix_row_t matrix[MATRIX_ROWS]; | ||||||
|  | static matrix_row_t matrix_debouncing[MATRIX_ROWS]; | ||||||
|  | 
 | ||||||
|  | static matrix_row_t read_cols(void); | ||||||
|  | static void init_cols(void); | ||||||
|  | static void unselect_rows(void); | ||||||
|  | static void select_row(uint8_t row); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | inline | ||||||
|  | uint8_t matrix_rows(void) | ||||||
|  | { | ||||||
|  |     return MATRIX_ROWS; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | inline | ||||||
|  | uint8_t matrix_cols(void) | ||||||
|  | { | ||||||
|  |     return MATRIX_COLS; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void matrix_init(void) | ||||||
|  | { | ||||||
|  |     // initialize row and col
 | ||||||
|  |     unselect_rows(); | ||||||
|  |     init_cols(); | ||||||
|  | 
 | ||||||
|  |     // initialize LED
 | ||||||
|  |     palSetPadMode(TEENSY_PIN20_IOPORT, TEENSY_PIN20, PAL_MODE_OUTPUT_PUSHPULL); | ||||||
|  | 
 | ||||||
|  |     // Turn on C's LED
 | ||||||
|  |     palClearPad(TEENSY_PIN20_IOPORT, TEENSY_PIN20); | ||||||
|  |     palSetPad(TEENSY_PIN10_IOPORT, TEENSY_PIN10); | ||||||
|  |      | ||||||
|  |     // initialize matrix state: all keys off
 | ||||||
|  |     for (uint8_t i=0; i < MATRIX_ROWS; i++) { | ||||||
|  |         matrix[i] = 0; | ||||||
|  |         matrix_debouncing[i] = 0; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     //debug
 | ||||||
|  |     debug_matrix = true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | uint8_t matrix_scan(void) | ||||||
|  | { | ||||||
|  |     for (uint8_t i = 0; i < MATRIX_ROWS; i++) { | ||||||
|  |         select_row(i); | ||||||
|  |         wait_us(30);  // without this wait read unstable value.
 | ||||||
|  |         matrix_row_t cols = read_cols(); | ||||||
|  |         if (matrix_debouncing[i] != cols) { | ||||||
|  |             matrix_debouncing[i] = cols; | ||||||
|  |             if (debouncing) { | ||||||
|  |                 debug("bounce!: "); debug_hex(debouncing); debug("\n"); | ||||||
|  |             } | ||||||
|  |             debouncing = DEBOUNCE; | ||||||
|  |         } | ||||||
|  |         unselect_rows(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (debouncing) { | ||||||
|  |         if (--debouncing) { | ||||||
|  |             wait_ms(1); | ||||||
|  |         } else { | ||||||
|  |             for (uint8_t i = 0; i < MATRIX_ROWS; i++) { | ||||||
|  |                 matrix[i] = matrix_debouncing[i]; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | inline | ||||||
|  | bool matrix_is_on(uint8_t row, uint8_t col) | ||||||
|  | { | ||||||
|  |     return (matrix[row] & ((matrix_row_t)1<<col)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | inline | ||||||
|  | matrix_row_t matrix_get_row(uint8_t row) | ||||||
|  | { | ||||||
|  |     return matrix[row]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void matrix_print(void) | ||||||
|  | { | ||||||
|  |     print("\nr/c 0123456789ABCDEF\n"); | ||||||
|  |     for (uint8_t row = 0; row < MATRIX_ROWS; row++) { | ||||||
|  |         phex(row); print(": "); | ||||||
|  |         pbin_reverse16(matrix_get_row(row)); | ||||||
|  |         print("\n"); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Column pin configuration
 | ||||||
|  |  */ | ||||||
|  | static void init_cols(void) | ||||||
|  | { | ||||||
|  |     // internal pull-up
 | ||||||
|  |     palSetPadMode(TEENSY_PIN12_IOPORT, TEENSY_PIN12, PAL_MODE_INPUT_PULLUP); | ||||||
|  |     palSetPadMode(TEENSY_PIN13_IOPORT, TEENSY_PIN13, PAL_MODE_INPUT_PULLUP); | ||||||
|  |     palSetPadMode(TEENSY_PIN18_IOPORT, TEENSY_PIN18, PAL_MODE_INPUT_PULLUP); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Returns status of switches(1:on, 0:off) */ | ||||||
|  | static matrix_row_t read_cols(void) | ||||||
|  | { | ||||||
|  |     return ( | ||||||
|  |         (palReadPad(TEENSY_PIN13_IOPORT, TEENSY_PIN13)==PAL_HIGH) ? 0 : (1<<0), | ||||||
|  |         (palReadPad(TEENSY_PIN12_IOPORT, TEENSY_PIN12)==PAL_HIGH) ? 0 : (1<<0), | ||||||
|  |         (palReadPad(TEENSY_PIN18_IOPORT, TEENSY_PIN18)==PAL_HIGH) ? 0 : (1<<0) | ||||||
|  |     ); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Row pin configuration
 | ||||||
|  |  */ | ||||||
|  | static void unselect_rows(void) | ||||||
|  | { | ||||||
|  |     palSetPadMode(TEENSY_PIN14_IOPORT, TEENSY_PIN14, PAL_MODE_INPUT); // hi-Z
 | ||||||
|  |     palSetPadMode(TEENSY_PIN15_IOPORT, TEENSY_PIN15, PAL_MODE_INPUT); // hi-Z
 | ||||||
|  |     palSetPadMode(TEENSY_PIN16_IOPORT, TEENSY_PIN16, PAL_MODE_INPUT); // hi-Z
 | ||||||
|  |     palSetPadMode(TEENSY_PIN11_IOPORT, TEENSY_PIN11, PAL_MODE_INPUT); // hi-Z
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void select_row(uint8_t row) | ||||||
|  | { | ||||||
|  |     (void)row; | ||||||
|  |     // Output low to select
 | ||||||
|  |     switch (row) { | ||||||
|  |         case 0: | ||||||
|  |             palSetPadMode(TEENSY_PIN14_IOPORT, TEENSY_PIN14, PAL_MODE_OUTPUT_PUSHPULL); | ||||||
|  |             palClearPad(TEENSY_PIN14_IOPORT, TEENSY_PIN14); | ||||||
|  |             break; | ||||||
|  |         case 1: | ||||||
|  |             palSetPadMode(TEENSY_PIN15_IOPORT, TEENSY_PIN15, PAL_MODE_OUTPUT_PUSHPULL); | ||||||
|  |             palClearPad(TEENSY_PIN15_IOPORT, TEENSY_PIN15); | ||||||
|  |             break; | ||||||
|  |         case 2: | ||||||
|  |             palSetPadMode(TEENSY_PIN16_IOPORT, TEENSY_PIN16, PAL_MODE_OUTPUT_PUSHPULL); | ||||||
|  |             palClearPad(TEENSY_PIN16_IOPORT, TEENSY_PIN16); | ||||||
|  |             break; | ||||||
|  |         case 3: | ||||||
|  |             palSetPadMode(TEENSY_PIN11_IOPORT, TEENSY_PIN11, PAL_MODE_OUTPUT_PUSHPULL); | ||||||
|  |             palClearPad(TEENSY_PIN11_IOPORT, TEENSY_PIN11); | ||||||
|  |             break; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,55 @@ | |||||||
|  | /*
 | ||||||
|  |     ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio | ||||||
|  | 
 | ||||||
|  |     Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |     you may not use this file except in compliance with the License. | ||||||
|  |     You may obtain a copy of the License at | ||||||
|  | 
 | ||||||
|  |         http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  | 
 | ||||||
|  |     Unless required by applicable law or agreed to in writing, software | ||||||
|  |     distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |     See the License for the specific language governing permissions and | ||||||
|  |     limitations under the License. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | #ifndef _MCUCONF_H_ | ||||||
|  | #define _MCUCONF_H_ | ||||||
|  | 
 | ||||||
|  | #define KL2x_MCUCONF | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * HAL driver system settings. | ||||||
|  |  */ | ||||||
|  | #if 1 | ||||||
|  | /* PEE mode - 48MHz system clock driven by (16 MHz) external crystal. */ | ||||||
|  | #define KINETIS_MCG_MODE            KINETIS_MCG_MODE_PEE | ||||||
|  | #define KINETIS_PLLCLK_FREQUENCY    96000000UL | ||||||
|  | #define KINETIS_SYSCLK_FREQUENCY    48000000UL | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if 0 | ||||||
|  | /* crystal-less FEI mode - 48 MHz with internal 32.768 kHz crystal */ | ||||||
|  | #define KINETIS_MCG_MODE            KINETIS_MCG_MODE_FEI | ||||||
|  | #define KINETIS_MCG_FLL_DMX32       1           /* Fine-tune for 32.768 kHz */ | ||||||
|  | #define KINETIS_MCG_FLL_DRS         1           /* 1464x FLL factor */ | ||||||
|  | #define KINETIS_SYSCLK_FREQUENCY    47972352UL  /* 32.768 kHz * 1464 (~48 MHz) */ | ||||||
|  | #define KINETIS_CLKDIV1_OUTDIV1     1           /* do not divide system clock */ | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * SERIAL driver system settings. | ||||||
|  |  */ | ||||||
|  | #define KINETIS_SERIAL_USE_UART0              TRUE | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * USB driver settings | ||||||
|  |  */ | ||||||
|  | #define KINETIS_USB_USE_USB0                  TRUE | ||||||
|  | /* Need to redefine this, since the default is for K20x */ | ||||||
|  | /* This is for Teensy LC; you should comment it out (or change to 5)
 | ||||||
|  |  * for Teensy 3.x */ | ||||||
|  | #define KINETIS_USB_USB0_IRQ_PRIORITY         2 | ||||||
|  | 
 | ||||||
|  | #endif /* _MCUCONF_H_ */ | ||||||
| @ -0,0 +1,59 @@ | |||||||
|  | # project specific files
 | ||||||
|  | SRC =	matrix.c \
 | ||||||
|  | 	    led.c | ||||||
|  | 
 | ||||||
|  | ## chip/board settings
 | ||||||
|  | # - the next two should match the directories in
 | ||||||
|  | #   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
 | ||||||
|  | # - For Teensies, FAMILY = KINETIS and SERIES is either
 | ||||||
|  | #   KL2x (LC) or K20x (3.0,3.1,3.2).
 | ||||||
|  | MCU_FAMILY = KINETIS | ||||||
|  | MCU_SERIES = KL2x | ||||||
|  | 
 | ||||||
|  | # Linker script to use
 | ||||||
|  | # - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
 | ||||||
|  | #   or <this_dir>/ld/
 | ||||||
|  | # - NOTE: a custom ld script is needed for EEPROM on Teensy LC
 | ||||||
|  | # - LDSCRIPT =
 | ||||||
|  | #   - MKL26Z64 for Teensy LC
 | ||||||
|  | #   - MK20DX128 for Teensy 3.0
 | ||||||
|  | #   - MK20DX256 for Teensy 3.1 and 3.2
 | ||||||
|  | MCU_LDSCRIPT = MKL26Z64 | ||||||
|  | 
 | ||||||
|  | # Startup code to use
 | ||||||
|  | #  - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
 | ||||||
|  | # - STARTUP =
 | ||||||
|  | #   - kl2x for Teensy LC
 | ||||||
|  | #   - k20x5 for Teensy 3.0
 | ||||||
|  | #   - k20x7 for Teensy 3.1 and 3.2
 | ||||||
|  | MCU_STARTUP = kl2x | ||||||
|  | 
 | ||||||
|  | # Board: it should exist either in <chibios>/os/hal/boards/
 | ||||||
|  | #  or <this_dir>/boards
 | ||||||
|  | # - BOARD =
 | ||||||
|  | #   - PJRC_TEENSY_LC for Teensy LC
 | ||||||
|  | #   - PJRC_TEENSY_3 for Teensy 3.0
 | ||||||
|  | #   - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
 | ||||||
|  | BOARD = PJRC_TEENSY_LC | ||||||
|  | 
 | ||||||
|  | # Cortex version
 | ||||||
|  | # Teensy LC is cortex-m0plus; Teensy 3.x are cortex-m4
 | ||||||
|  | MCU  = cortex-m0plus | ||||||
|  | 
 | ||||||
|  | # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
 | ||||||
|  | # I.e. 6 for Teensy LC; 7 for Teensy 3.x
 | ||||||
|  | ARMV = 6 | ||||||
|  | 
 | ||||||
|  | ifndef QUANTUM_DIR | ||||||
|  | 	include ../../../Makefile | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | # QMK Features
 | ||||||
|  | #BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
 | ||||||
|  | MOUSEKEY_ENABLE = yes   # Mouse keys | ||||||
|  | EXTRAKEY_ENABLE = yes   # Audio control and System control | ||||||
|  | CONSOLE_ENABLE = yes    # Console for debug | ||||||
|  | COMMAND_ENABLE = yes    # Commands for debug and configuration | ||||||
|  | SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend | ||||||
|  | NKRO_ENABLE = yes           # USB Nkey Rollover | ||||||
|  | CUSTOM_MATRIX = yes # Custom matrix file | ||||||
| @ -0,0 +1 @@ | |||||||
|  | #include "teensy_lc_synth.h" | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | #ifndef TEENSY_LC_SYNTH_H | ||||||
|  | #define TEENSY_LC_SYNTH_H | ||||||
|  | #include "quantum.h" | ||||||
|  | 
 | ||||||
|  | #define KEYMAP( \ | ||||||
|  |          k31, k20,      k22, k10, k01, \ | ||||||
|  |       k30, k32, k21, k11, k12, k00, k02 \ | ||||||
|  | ) { \ | ||||||
|  |     { k00, k01, k02 }, \ | ||||||
|  |     { k10, k11, k12 }, \ | ||||||
|  |     { k20, k21, k22 }, \ | ||||||
|  |     { k30, k31, k32 } \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
					Loading…
					
					
				
		Reference in new issue
	
	 skullY
						skullY