C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 1 C51 COMPILER V9.59.0.0, COMPILATION OF MODULE SC92F_GPIO OBJECT MODULE PLACED IN ..\Output\sc92f_gpio.obj COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_gpio.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE -) BROWSE INCDIR(..\FWLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\sc92f_gpi -o.lst) OBJECT(..\Output\sc92f_gpio.obj) line level source 1 //************************************************************ 2 // Copyright (c) 深圳市赛元微电子有限公司 3 // 文件名称 : sc92f_gpio.c 4 // 作者 : 5 // 模块功能 : GPIO固件库函数C文件 6 // 局部函数列表 : 7 // 最后更正日期 : 2022/01/11 8 // 版本 : V1.10004 9 // 说明 : 本文件仅适用于赛元92F/93F/92L系列单片机 10 //************************************************************* 11 12 13 #include "sc92f_gpio.h" 14 15 /************************************************** 16 *函数名称:void GPIO_DeInit(void) 17 *函数功能:GPIO相关寄存器复位至缺省值 18 *入口参数:void 19 *出口参数:void 20 **************************************************/ 21 void GPIO_DeInit(void) 22 { 23 1 P0CON = 0x00; 24 1 P0PH = 0x00; 25 1 P0 = 0; 26 1 P1CON = 0x00; 27 1 P1PH = 0x00; 28 1 P1 = 0; 29 1 P2CON = 0x00; 30 1 P2PH = 0x00; 31 1 P2 = 0; 32 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 -F84Ax_2) || defined(SC92F74Ax_2)\ 33 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) P3CON = 0x00; P3PH = 0x00; P3 = 0; P4CON = 0x00; P4PH = 0x00; P4 = 0; #endif 41 1 #if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F7003) && !defined(S -C92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) 42 1 P5CON = 0x00; 43 1 P5PH = 0x00; 44 1 P5 = 0; 45 1 #endif 46 1 } 47 48 /************************************************** 49 *函数名称:void GPIO_Init(GPIO_TypeDef GPIOx, uint8_t PortPins, GPIO_Mode_TypeDef GPIO_Mode) 50 *函数功能:GPIO口模式配置初始化 51 *入口参数: C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 2 52 GPIO_TypeDef:GPIOx:选择操作的GPIO口 53 GPIO_Pin_TypeDef:PortPins:选择GPIO管脚Pxy 54 GPIO_Mode_TypeDef:GPIO_Mode:选择GPIO口模式(高阻输入、上拉输入、推挽输出) 55 *出口参数:void 56 **************************************************/ 57 void GPIO_Init(GPIO_TypeDef GPIOx, 58 uint8_t PortPins, GPIO_Mode_TypeDef GPIO_Mode) 59 { 60 1 if (GPIOx == GPIO0) 61 1 { 62 2 if (GPIO_Mode == GPIO_MODE_IN_HI) 63 2 { 64 3 P0CON &= ~PortPins; 65 3 P0PH &= ~PortPins; 66 3 } 67 2 68 2 if (GPIO_Mode == GPIO_MODE_IN_PU) 69 2 { 70 3 P0CON &= ~PortPins; 71 3 P0PH |= PortPins; 72 3 } 73 2 74 2 if (GPIO_Mode == GPIO_MODE_OUT_PP) 75 2 { 76 3 P0CON |= PortPins; 77 3 } 78 2 } 79 1 else if (GPIOx == GPIO1) 80 1 { 81 2 if (GPIO_Mode == GPIO_MODE_IN_HI) 82 2 { 83 3 P1CON &= ~PortPins; 84 3 P1PH &= ~PortPins; 85 3 } 86 2 87 2 if (GPIO_Mode == GPIO_MODE_IN_PU) 88 2 { 89 3 P1CON &= ~PortPins; 90 3 P1PH |= PortPins; 91 3 } 92 2 93 2 if (GPIO_Mode == GPIO_MODE_OUT_PP) 94 2 { 95 3 P1CON |= PortPins; 96 3 } 97 2 } 98 1 else if (GPIOx == GPIO2) 99 1 { 100 2 if (GPIO_Mode == GPIO_MODE_IN_HI) 101 2 { 102 3 P2CON &= ~PortPins; 103 3 P2PH &= ~PortPins; 104 3 } 105 2 106 2 if (GPIO_Mode == GPIO_MODE_IN_PU) 107 2 { 108 3 P2CON &= ~PortPins; 109 3 P2PH |= PortPins; 110 3 } 111 2 112 2 if (GPIO_Mode == GPIO_MODE_OUT_PP) 113 2 { C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 3 114 3 P2CON |= PortPins; 115 3 } 116 2 } 117 1 118 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 -F84Ax_2) || defined(SC92F74Ax_2)\ 119 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) else if (GPIOx == GPIO3) { if (GPIO_Mode == GPIO_MODE_IN_HI) { P3CON &= ~PortPins; P3PH &= ~PortPins; } if (GPIO_Mode == GPIO_MODE_IN_PU) { P3CON &= ~PortPins; P3PH |= PortPins; } if (GPIO_Mode == GPIO_MODE_OUT_PP) { P3CON |= PortPins; } } else if (GPIOx == GPIO4) { if (GPIO_Mode == GPIO_MODE_IN_HI) { P4CON &= ~PortPins; P4PH &= ~PortPins; } if (GPIO_Mode == GPIO_MODE_IN_PU) { P4CON &= ~PortPins; P4PH |= PortPins; } if (GPIO_Mode == GPIO_MODE_OUT_PP) { P4CON |= PortPins; } } #endif 160 1 #if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F7003) && !defined(S -C92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) 161 1 else if (GPIOx == GPIO5) 162 1 { 163 2 if (GPIO_Mode == GPIO_MODE_IN_HI) 164 2 { 165 3 P5CON &= ~PortPins; 166 3 P5PH &= ~PortPins; 167 3 } 168 2 169 2 if (GPIO_Mode == GPIO_MODE_IN_PU) 170 2 { 171 3 P5CON &= ~PortPins; 172 3 P5PH |= PortPins; 173 3 } C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 4 174 2 175 2 if (GPIO_Mode == GPIO_MODE_OUT_PP) 176 2 { 177 3 P5CON |= PortPins; 178 3 } 179 2 } 180 1 181 1 #endif 182 1 } 183 184 /************************************************** 185 *函数名称:void GPIO_Write(GPIO_TypeDef GPIOx, uint8_t PortVal) 186 *函数功能:GPIO口赋值 187 *入口参数: 188 GPIO_TypeDef:GPIOx:选择操作的GPIO口 189 uint8_t:PortVal:GPIO口的值 190 *出口参数:void 191 **************************************************/ 192 void GPIO_Write(GPIO_TypeDef GPIOx, 193 uint8_t PortVal) 194 { 195 1 if (GPIOx == GPIO0) 196 1 { 197 2 P0 = PortVal; 198 2 } 199 1 200 1 if (GPIOx == GPIO1) 201 1 { 202 2 P1 = PortVal; 203 2 } 204 1 205 1 if (GPIOx == GPIO2) 206 1 { 207 2 P2 = PortVal; 208 2 } 209 1 210 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 -F84Ax_2) || defined(SC92F74Ax_2)\ 211 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) if (GPIOx == GPIO3) { P3 = PortVal; } if (GPIOx == GPIO4) { P4 = PortVal; } #endif 224 1 #if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(S -C92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) 225 1 226 1 if (GPIOx == GPIO5) 227 1 { 228 2 P5 = PortVal; 229 2 } 230 1 231 1 #endif 232 1 } 233 C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 5 234 /************************************************** 235 *函数名称:void GPIO_WriteHigh(GPIO_TypeDef GPIOx, uint8_t PortPins) 236 *函数功能:GPIO口管脚Pxy置位 237 *入口参数: 238 GPIO_TypeDef:GPIOx:选择操作的GPIO口 239 GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy 240 *出口参数:void 241 **************************************************/ 242 void GPIO_WriteHigh(GPIO_TypeDef GPIOx, 243 uint8_t PortPins) 244 { 245 1 if (GPIOx == GPIO0) 246 1 { 247 2 P0 |= PortPins; 248 2 } 249 1 250 1 if (GPIOx == GPIO1) 251 1 { 252 2 P1 |= PortPins; 253 2 } 254 1 255 1 if (GPIOx == GPIO2) 256 1 { 257 2 P2 |= PortPins; 258 2 } 259 1 260 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 -F84Ax_2) || defined(SC92F74Ax_2)\ 261 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) - if (GPIOx == GPIO3) { P3 |= PortPins; } if (GPIOx == GPIO4) { P4 |= PortPins; } #endif 274 1 #if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(S -C92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) 275 1 276 1 if (GPIOx == GPIO5) 277 1 { 278 2 P5 |= PortPins; 279 2 } 280 1 281 1 #endif 282 1 } 283 284 /************************************************** 285 *函数名称:void GPIO_WriteLow(GPIO_TypeDef GPIOx, uint8_t PortPins) 286 *函数功能:GPIO口管脚Pxy复位 287 *入口参数: 288 GPIO_TypeDef:GPIOx:选择操作的GPIO口 289 GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy 290 *出口参数:void 291 **************************************************/ 292 void GPIO_WriteLow(GPIO_TypeDef GPIOx, C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 6 293 uint8_t PortPins) 294 { 295 1 if (GPIOx == GPIO0) 296 1 { 297 2 P0 &= ~PortPins; 298 2 } 299 1 300 1 if (GPIOx == GPIO1) 301 1 { 302 2 P1 &= ~PortPins; 303 2 } 304 1 305 1 if (GPIOx == GPIO2) 306 1 { 307 2 P2 &= ~PortPins; 308 2 } 309 1 310 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 -F84Ax_2) || defined(SC92F74Ax_2)\ 311 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) if (GPIOx == GPIO3) { P3 &= ~PortPins; } if (GPIOx == GPIO4) { P4 &= ~PortPins; } #endif 324 1 #if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(S -C92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) 325 1 326 1 if (GPIOx == GPIO5) 327 1 { 328 2 P5 &= ~PortPins; 329 2 } 330 1 331 1 #endif 332 1 } 333 334 /************************************************** 335 *函数名称:uint8_t GPIO_ReadPort(GPIO_TypeDef GPIOx) 336 *函数功能:读GPIO口Px的值 337 *入口参数: 338 GPIO_TypeDef:GPIOx:选择操作的GPIO口 339 *出口参数:uint8_t 返回Px的值 340 **************************************************/ 341 uint8_t GPIO_ReadPort(GPIO_TypeDef GPIOx) 342 { 343 1 if (GPIOx == GPIO0) 344 1 { 345 2 return P0; 346 2 } 347 1 else if (GPIOx == GPIO1) 348 1 { 349 2 return P1; 350 2 } 351 1 else if (GPIOx == GPIO2) 352 1 { C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 7 353 2 return P2; 354 2 } 355 1 356 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 -F84Ax_2) || defined(SC92F74Ax_2)\ 357 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) else if (GPIOx == GPIO3) { return P3; } else if (GPIOx == GPIO4) { return P4; } #endif 368 1 #if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(S -C92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) 369 1 else if (GPIOx == GPIO5) 370 1 { 371 2 return P5; 372 2 } 373 1 374 1 #endif 375 1 else 376 1 { 377 2 return 0; 378 2 } 379 1 } 380 381 /************************************************** 382 *函数名称:BitStatus GPIO_ReadPin(GPIO_TypeDef GPIOx, uint8_t PortPins) 383 *函数功能:读GPIO口管脚Pxy的值 384 *入口参数: 385 GPIO_TypeDef:GPIOx:选择操作的GPIO口 386 GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy 387 *出口参数:BitStatus 返回Pxy的值 388 **************************************************/ 389 BitStatus GPIO_ReadPin(GPIO_TypeDef GPIOx, 390 uint8_t PortPins) 391 { 392 1 if (GPIOx == GPIO0) 393 1 { 394 2 return ((bit)(P0 & PortPins)); 395 2 } 396 1 else if (GPIOx == GPIO1) 397 1 { 398 2 return ((bit)(P1 & PortPins)); 399 2 } 400 1 else if (GPIOx == GPIO2) 401 1 { 402 2 return ((bit)(P2 & PortPins)); 403 2 } 404 1 405 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 -F84Ax_2) || defined(SC92F74Ax_2)\ 406 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) else if (GPIOx == GPIO3) { return ((bit)(P3 & PortPins)); } else if (GPIOx == GPIO4) C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 8 { return ((bit)(P4 & PortPins)); } #endif 417 1 #if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(S -C92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) 418 1 else if (GPIOx == GPIO5) 419 1 { 420 2 return ((bit)(P5 & PortPins)); 421 2 } 422 1 423 1 #endif 424 1 return 0; 425 1 } 426 427 428 /************************************************** 429 *函数名称:void GPIO_IOH_Config(GPIO_TypeDef GPIOx, uint8_t PortPins,GPIO_IOH_Grade_TypeDef GPIO_IOH_Grade) 430 *函数功能:设置GPIO口管脚IOH输出能力 431 *入口参数: 432 GPIO_TypeDef:GPIOx:选择操作的GPIO口 433 GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy 434 GPIO_IOH_Grade_TypeDef:GPIO_IOH_Grade:IO输出等级 435 *出口参数:BitStatus 返回Pxy的值 436 **************************************************/ 437 #if !defined(SC92F7003) && !defined(SC92F8003) && !defined(SC92F740x) 438 void GPIO_IOH_Config(GPIO_TypeDef GPIOx, GPIO_Pin_TypeDef PortPins, GPIO_IOH_Grade_TypeDef GPIO_IOH_Grade) 439 { 440 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 -F84Ax_2) || defined(SC92F74Ax_2)\ 441 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92 -L753x) switch (GPIOx) { case GPIO0: if (PortPins == GPIO_PIN_LNIB) { IOHCON0 &= 0xFC; IOHCON0 |= GPIO_IOH_Grade; } else if (PortPins == GPIO_PIN_HNIB) { IOHCON0 &= 0xF3; IOHCON0 |= GPIO_IOH_Grade << 2; } break; case GPIO1: if (PortPins == GPIO_PIN_LNIB) { IOHCON0 &= 0xCF; IOHCON0 |= GPIO_IOH_Grade << 4; } else if (PortPins == GPIO_PIN_HNIB) { IOHCON0 &= 0x3F; IOHCON0 |= GPIO_IOH_Grade << 6; } break; case GPIO2: if (PortPins == GPIO_PIN_LNIB) { C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 9 IOHCON1 &= 0xFC; IOHCON1 |= GPIO_IOH_Grade; } else if (PortPins == GPIO_PIN_HNIB) { IOHCON1 &= 0xF3; IOHCON1 |= GPIO_IOH_Grade << 2; } break; #if defined (SC92L853x) || defined (SC92L753x) case GPIO5: if (PortPins == GPIO_PIN_LNIB) { IOHCON1 &= 0xCF; IOHCON1 |= GPIO_IOH_Grade << 4; } else if (PortPins == GPIO_PIN_HNIB) { IOHCON1 &= 0x3f; IOHCON1 |= GPIO_IOH_Grade << 6; } break; #else case GPIO3: if (PortPins == GPIO_PIN_LNIB) { IOHCON1 &= 0xCF; IOHCON1 |= GPIO_IOH_Grade << 4; } break; #endif default: break; } #else 506 1 switch (GPIOx) 507 1 { 508 2 case GPIO0: 509 2 if (PortPins == GPIO_PIN_LNIB) 510 2 { 511 3 IOHCON &= 0xFC; 512 3 IOHCON |= GPIO_IOH_Grade; 513 3 } 514 2 else if (PortPins == GPIO_PIN_HNIB) 515 2 { 516 3 IOHCON &= 0xF3; 517 3 IOHCON |= GPIO_IOH_Grade << 2; 518 3 } 519 2 break; 520 2 case GPIO2: 521 2 if (PortPins == GPIO_PIN_LNIB) 522 2 { 523 3 IOHCON &= 0xFC; 524 3 IOHCON |= GPIO_IOH_Grade; 525 3 } 526 2 else if (PortPins == GPIO_PIN_HNIB) 527 2 { 528 3 IOHCON &= 0xF3; 529 3 IOHCON |= GPIO_IOH_Grade << 2; 530 3 } 531 2 break; 532 2 default: C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 10 533 2 break; 534 2 } 535 1 #endif 536 1 } 537 #endif 538 539 /******************* (C) COPYRIGHT 2021 SinOne Microelectronics *****END OF FILE****/ MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 541 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- ---- IDATA SIZE = ---- ---- BIT SIZE = ---- ---- EDATA SIZE = ---- ---- HDATA SIZE = ---- ---- XDATA CONST SIZE = ---- ---- FAR CONST SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)