📄 hal_key.lst
字号:
##############################################################################
# #
# IAR 8051 C/C++ Compiler V7.20H/W32 06/Nov/2008 11:13:20 #
# Copyright 2004-2006 IAR Systems. All rights reserved. #
# #
# Core = plain #
# Code model = banked #
# Data model = large #
# Calling convention = xdata reentrant #
# Constant location = data #
# Dptr setup = 1,16 #
# Source file = E:\解决\路由\Components\hal\target\CC2430DB\hal_k #
# ey.c #
# Command line = -f E:\解决\路由\Projects\zstack\Samples\SampleApp #
# \CC2430DB\..\..\..\Tools\CC2430DB\f8wCoord.cfg #
# (-DCPU32MHZ -DFORCE_MAC_NEAR -DROOT=__near_func #
# -DMAC_CFG_APP_PENDING_QUEUE=TRUE #
# -DZDO_COORDINATOR -DRTR_NWK -DBLINK_LEDS #
# "-DCONST=const __code" -DGENERIC=__generic) -f #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\..\..\..\Tools\CC2430DB\f8wConfig.cfg #
# (-DSECURE=0 -DDEFAULT_CHANLIST=0x00000800 #
# -DZDAPP_CONFIG_PAN_ID=0xFFFF #
# -DNWK_START_DELAY=100 -DEXTENDED_JOINING_RANDOM_M #
# ASK=0x007F -DBEACON_REQUEST_DELAY=100 #
# -DBEACON_REQ_DELAY_MASK=0x00FF #
# -DROUTE_EXPIRY_TIME=30 -DAPSC_ACK_WAIT_DURATION_P #
# OLLED=3000 -DNWK_INDIRECT_MSG_TIMEOUT=7 #
# -DMAX_RREQ_ENTRIES=10 -DAPSC_MAX_FRAME_RETRIES=3 #
# -DNWK_MAX_DATA_RETRIES=2 #
# -DMAX_POLL_FAILURE_RETRIES=2 -DMAX_BCAST=9 #
# -DAPS_MAX_GROUPS=16 -DMAX_RTG_ENTRIES=20 #
# -DNWK_MAX_BINDING_ENTRIES=10 #
# -DMAX_BINDING_CLUSTER_IDS=5 #
# "-DDEFAULT_KEY={0x01, 0x03, 0x05, 0x07, 0x09, #
# 0x0B, 0x0D, 0x0F, 0x00, 0x02, 0x04, 0x06, 0x08, #
# 0x0A, 0x0C, 0x0D}" -DRFD_RCVC_ALWAYS_ON=FALSE #
# -DPOLL_RATE=1000 -DQUEUED_POLL_RATE=100 #
# -DRESPONSE_POLL_RATE=100 -DREJOIN_POLL_RATE=440 #
# -DTOP_BOOT_PAGES=0) -I "D:\Program Files\IAR #
# Systems\Embedded Workbench 4.05 Evaluation #
# version\8051\inc\" -I "D:\Program Files\IAR #
# Systems\Embedded Workbench 4.05 Evaluation #
# version\8051\inc\clib\" -I #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\ -I E:\解决\路由\Projects\zstack\Samples\S #
# ampleApp\CC2430DB\..\Source\ -I #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\..\..\..\ZMain\TI2430DB\ -I #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\..\..\..\..\..\Components\mt\ -I #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\..\..\..\..\..\Components\hal\include\ -I #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\..\..\..\..\..\Components\hal\target\CC243 #
# 0DB\ -I E:\解决\路由\Projects\zstack\Samples\Samp #
# leApp\CC2430DB\..\..\..\..\..\Components\osal\mcu #
# \ccsoc\ -I E:\解决\路由\Projects\zstack\Samples\S #
# ampleApp\CC2430DB\..\..\..\..\..\Components\osal\ #
# include\ -I E:\解决\路由\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\..\..\..\..\..\Components\stac #
# k\af\ -I E:\解决\路由\Projects\zstack\Samples\Sam #
# pleApp\CC2430DB\..\..\..\..\..\Components\stack\n #
# wk\ -I E:\解决\路由\Projects\zstack\Samples\Sampl #
# eApp\CC2430DB\..\..\..\..\..\Components\stack\sec #
# \ -I E:\解决\路由\Projects\zstack\Samples\SampleA #
# pp\CC2430DB\..\..\..\..\..\Components\stack\sys\ #
# -I E:\解决\路由\Projects\zstack\Samples\SampleApp #
# \CC2430DB\..\..\..\..\..\Components\stack\zdo\ #
# -I E:\解决\路由\Projects\zstack\Samples\SampleApp #
# \CC2430DB\..\..\..\..\..\Components\zmac\f8w\ -I #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\..\..\..\..\..\Components\zmac\ -I #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\..\..\..\..\..\Components\services\saddr\ #
# -I E:\解决\路由\Projects\zstack\Samples\SampleApp #
# \CC2430DB\..\..\..\..\..\Components\services\sdat #
# a\ -I E:\解决\路由\Projects\zstack\Samples\Sample #
# App\CC2430DB\..\..\..\..\..\Components\mac\includ #
# e\ -I E:\解决\路由\Projects\zstack\Samples\Sample #
# App\CC2430DB\..\..\..\..\..\Components\mac\high_l #
# evel\ -I E:\解决\路由\Projects\zstack\Samples\Sam #
# pleApp\CC2430DB\..\..\..\..\..\Components\mac\low #
# _level\srf03\ -I E:\解决\路由\Projects\zstack\Sam #
# ples\SampleApp\CC2430DB\..\..\..\..\..\Components #
# \mac\low_level\srf03\single_chip\ -D CC2430DB #
# -lC E:\解决\路由\Projects\zstack\Samples\SampleAp #
# p\CC2430DB\CoordinatorDB\List\ -lA #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\CoordinatorDB\List\ --diag_suppress #
# Pe001,Pa010 --diag_remark pe550 -o #
# E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\CoordinatorDB\Obj\ -e #
# --require_prototypes -z9 --no_code_motion #
# --debug --core=plain --dptr=16,1 #
# --data_model=large --code_model=banked #
# --calling_convention=xdata_reentrant #
# --place_constants=data --nr_virtual_regs 8 #
# E:\解决\路由\Components\hal\target\CC2430DB\hal_k #
# ey.c #
# List file = E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\CoordinatorDB\List\hal_key.lst #
# Object file = E:\解决\路由\Projects\zstack\Samples\SampleApp\CC #
# 2430DB\CoordinatorDB\Obj\hal_key.r51 #
# #
# #
##############################################################################
E:\解决\路由\Components\hal\target\CC2430DB\hal_key.c
1 /**************************************************************************************************
2 Filename: hal_key.c
3 Revised: $Date: 2007-03-29 16:44:28 -0700 (Thu, 29 Mar 2007) $
4 Revision: $Revision: 13896 $
5
6 Description:
7
8 This file contains the interface to the HAL KEY Service.
9
10 Copyright (c) 2006 by Texas Instruments, Inc.
11 All Rights Reserved. Permission to use, reproduce, copy, prepare
12 derivative works, modify, distribute, perform, display or sell this
13 software and/or its documentation for any purpose is prohibited
14 without the express written consent of Texas Instruments, Inc.
15 **************************************************************************************************/
16 /*********************************************************************
17 NOTE: If polling is used, the hal_driver task schedules the KeyRead()
18 to occur every 100ms. This should be long enough to naturally
19 debounce the keys. The KeyRead() function remembers the key
20 state of the previous poll and will only return a non-zero
21 value if the key state changes.
22
23 NOTE: If interrupts are used, the KeyRead() function is scheduled
24 25ms after the interrupt occurs by the ISR. This delay is used
25 for key debouncing. The ISR disables any further Key interrupt
26 until KeyRead() is executed. KeyRead() will re-enable Key
27 interrupts after executing. Unlike polling, when interrupts
28 are enabled, the previous key state is not remembered. This
29 means that KeyRead() will return the current state of the keys
30 (not a change in state of the keys).
31
32 NOTE: If interrupts are used, the KeyRead() fucntion is scheduled by
33 the ISR. Therefore, the joystick movements will only be detected
34 during a pushbutton interrupt caused by S1 or the center joystick
35 pushbutton.
36
37 NOTE: When a switch like S1 is pushed, the S1 signal goes from a normally
38 high state to a low state. This transition is typically clean. The
39 duration of the low state is around 200ms. When the signal returns
40 to the high state, there is a high likelihood of signal bounce, which
41 causes a unwanted interrupts. Normally, we would set the interrupt
42 edge to falling edge to generate an interrupt when S1 is pushed, but
43 because of the signal bounce, it is better to set the edge to rising
44 edge to generate an interrupt when S1 is released. The debounce logic
45 can then filter out the signal bounce. The result is that we typically
46 get only 1 interrupt per button push. This mechanism is not totally
47 foolproof because occasionally, signal bound occurs during the falling
48 edge as well. A similar mechanism is used to handle the joystick
49 pushbutton on the DB. For the EB, we do not have independent control
50 of the interrupt edge for the S1 and center joystick pushbutton. As
51 a result, only one or the other pushbuttons work reasonably well with
52 interrupts. The default is the make the S1 switch on the EB work more
53 reliably.
54
55 *********************************************************************/
56
57 /**************************************************************************************************
58 * INCLUDES
59 **************************************************************************************************/
60 #include "hal_mcu.h"
\ In segment SFR_AN, at 0x89
\ unsigned char volatile __sfr P0IFG
\ P0IFG:
\ 000000 DS 1
61 #include "hal_defs.h"
62 #include "hal_types.h"
63 #include "hal_drivers.h"
64 #include "hal_adc.h"
65 #include "hal_key.h"
66 #include "osal.h"
67
68 /**************************************************************************************************
69 * MACROS
70 **************************************************************************************************/
71
72 /**************************************************************************************************
73 * CONSTANTS
74 **************************************************************************************************/
75 #define HAL_KEY_BIT0 0x01
76 #define HAL_KEY_BIT1 0x02
77 #define HAL_KEY_BIT2 0x04
78 #define HAL_KEY_BIT3 0x08
79 #define HAL_KEY_BIT4 0x10
80 #define HAL_KEY_BIT5 0x20
81 #define HAL_KEY_BIT6 0x40
82 #define HAL_KEY_BIT7 0x80
83
84 #define HAL_KEY_RISING_EDGE 0
85 #define HAL_KEY_FALLING_EDGE 1
86
87 #define HAL_KEY_PDUP2 0x80
88 #define HAL_KEY_PDUP1 0x40
89 #define HAL_KEY_PDUP0 0x20
90
91 #define HAL_KEY_DEBOUNCE_VALUE 25
92 #define HAL_KEY_POLLING_VALUE 100
93
94
95 #if defined (HAL_BOARD_CC2430DB)
96 #define HAL_KEY_SW_6_ENABLE
97 #define HAL_KEY_SW_6_PORT P0 /* Port location of SW1 */
98 #define HAL_KEY_SW_6_BIT HAL_KEY_BIT1 /* Bit location of SW1 */
99 #define HAL_KEY_SW_6_SEL P0SEL /* Port Select Register for SW1 */
100 #define HAL_KEY_SW_6_DIR P0DIR /* Port Direction Register for SW1 */
101 #define HAL_KEY_SW_6_IEN IEN1 /* Interrupt Enable Register for SW1 */
102 #define HAL_KEY_SW_6_IENBIT HAL_KEY_BIT5 /* Interrupt Enable bit for SW1 */
103 #define HAL_KEY_SW_6_EDGE HAL_KEY_RISING_EDGE /* Type of interrupt for SW1 */
104 #define HAL_KEY_SW_6_EDGEBIT HAL_KEY_BIT0 /* EdgeType enable bit SW1 */
105 #define HAL_KEY_SW_6_ICTL PICTL /* Port Interrupt Control for SW1 */
106 #define HAL_KEY_SW_6_ICTLBIT HAL_KEY_BIT3 /* Interrupt enable bit for SW1 */
107 #define HAL_KEY_SW_6_PXIFG P0IFG /* Port Interrupt Flag for SW1 */
108
109 #define HAL_KEY_JOYSTICK_ENABLE
110 #define HAL_KEY_JOY_CHN HAL_ADC_CHANNEL_6
111
112 #define HAL_KEY_SW_5_ENABLE /* 2430DB - SW5 is enabled based on key interrupt enable or not - see config */
113 #define HAL_KEY_SW_5_PORT P2 /* Port location of SW5 */
114 #define HAL_KEY_SW_5_BIT HAL_KEY_BIT0 /* Bit location of SW5 */
115 #define HAL_KEY_SW_5_SEL P2SEL /* Port Select Register for SW5 */
116 #define HAL_KEY_SW_5_DIR P2DIR /* Port Direction Register for SW5 */
117 #define HAL_KEY_SW_5_INP P2INP /* Port Input Mode Register for SW5 */
118 #define HAL_KEY_SW_5_IEN IEN2 /* Interrupt Enable Register for SW5 */
119 #define HAL_KEY_SW_5_IENBIT HAL_KEY_BIT1 /* Interrupt Enable bit for SW5 */
120 #define HAL_KEY_SW_5_EDGE HAL_KEY_FALLING_EDGE /* Type of interrupt for SW5 */
121 #define HAL_KEY_SW_5_EDGEBIT HAL_KEY_BIT2 /* EdgeType enable bit SW5 */
122 #define HAL_KEY_SW_5_ICTL PICTL /* Port Interrupt Control for SW5 */
123 #define HAL_KEY_SW_5_ICTLBIT HAL_KEY_BIT5 /* Interrupt enable bit for SW5 */
124 #define HAL_KEY_SW_5_PXIFG P2IFG /* Port Interrupt Flag for SW5 */
125
126 #define HAL_KEY_P0INT_LOW_USED HAL_KEY_SW_6_BIT /* P0 can only be enabled/disabled as group of high or low nibble */
127 #define HAL_KEY_POINT_HIGH_USED 0 /* P0 can only be enabled/disabled as group of high or low nibble */
128 #endif
129
130 #if defined (HAL_BOARD_CC2430EB) || defined (HAL_BOARD_CC2430BB)
131 #define HAL_KEY_SW_6_ENABLE
132 #define HAL_KEY_SW_6_PORT P0 /* Port location of SW1 */
133 #define HAL_KEY_SW_6_BIT HAL_KEY_BIT1 /* Bit location of SW1 */
134 #define HAL_KEY_SW_6_SEL P0SEL /* Port Select Register for SW1 */
135 #define HAL_KEY_SW_6_DIR P0DIR /* Port Direction Register for SW1 */
136 #define HAL_KEY_SW_6_IEN IEN1 /* Interrupt Enable Register for SW1 */
137 #define HAL_KEY_SW_6_IENBIT HAL_KEY_BIT5 /* Interrupt Enable bit for SW1 */
138 #define HAL_KEY_SW_6_EDGE HAL_KEY_RISING_EDGE /* Type of interrupt for SW1 */
139 #define HAL_KEY_SW_6_EDGEBIT HAL_KEY_BIT0 /* EdgeType enable bit SW1 */
140 #define HAL_KEY_SW_6_ICTL PICTL /* Port Interrupt Control for SW1 */
141 #define HAL_KEY_SW_6_ICTLBIT HAL_KEY_BIT3 /* Interrupt enable bit for SW1 */
142 #define HAL_KEY_SW_6_PXIFG P0IFG /* Port Interrupt Flag for SW1 */
143
144 #define HAL_KEY_P0INT_LOW_USED HAL_KEY_SW_6_BIT /* P0 can only be enabled/disabled as group of high or low nibble */
145 #endif
146
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -