1 /** 2 * @file spixf.h 3 * @brief SPI Flash Controller driver header file. 4 */ 5 6 /****************************************************************************** 7 * 8 * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by 9 * Analog Devices, Inc.), 10 * Copyright (C) 2023-2024 Analog Devices, Inc. 11 * 12 * Licensed under the Apache License, Version 2.0 (the "License"); 13 * you may not use this file except in compliance with the License. 14 * You may obtain a copy of the License at 15 * 16 * http://www.apache.org/licenses/LICENSE-2.0 17 * 18 * Unless required by applicable law or agreed to in writing, software 19 * distributed under the License is distributed on an "AS IS" BASIS, 20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 21 * See the License for the specific language governing permissions and 22 * limitations under the License. 23 * 24 ******************************************************************************/ 25 26 /* Define to prevent redundant inclusion */ 27 #ifndef LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32665_SPIXF_H_ 28 #define LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32665_SPIXF_H_ 29 30 /* **** Includes **** */ 31 #include "mxc_device.h" 32 #include "mxc_sys.h" 33 #include "spixfc_regs.h" 34 #include "spixfm_regs.h" 35 #include "spixfc_fifo_regs.h" 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 /** 42 * @defgroup spixf SPI External Flash (SPIXF) 43 * @ingroup periphlibs 44 * @{ 45 */ 46 47 /* **** Definitions **** */ 48 /** 49 * @brief Active levels for slave select lines. 50 */ 51 typedef enum { 52 MXC_SPIXF_SSEL0_HIGH = (0x1 << 0), 53 MXC_SPIXF_SSEL0_LOW = 0, 54 MXC_SPIXF_SSEL1_HIGH = (0x1 << 1), 55 MXC_SPIXF_SSEL1_LOW = 0, 56 MXC_SPIXF_SSEL2_HIGH = (0x1 << 2), 57 MXC_SPIXF_SSEL2_LOW = 0, 58 MXC_SPIXF_SSEL3_HIGH = (0x1 << 3), 59 MXC_SPIXF_SSEL3_LOW = 0 60 } mxc_spixf_ssel_t; 61 62 /** 63 * @brief Header direction. 64 */ 65 typedef enum { 66 MXC_SPIXF_HEADER_DIR_NONE, 67 MXC_SPIXF_HEADER_DIR_TX, 68 MXC_SPIXF_HEADER_DIR_RX, 69 MXC_SPIXF_HEADER_DIR_BOTH, 70 } mxc_spixf_hdr_direction_t; 71 72 /** 73 * @brief SPIXF Pin mode. 74 */ 75 typedef enum { 76 MXC_SPIXF_ACTIVE_LOW, 77 MXC_SPIF_ACTIVE_HIGH, 78 } mxc_spixf_sspol_t; 79 80 /** 81 * @brief SPIXF set command. 82 */ 83 typedef enum { 84 MXC_SPIXF_CMD_EVERY_TRANS, 85 MXC_SPIXF_CMD_FIRST_TRANS, 86 } mxc_spixf_cmd_t; 87 88 /** 89 * @brief SPIXF mode. 90 * @note modes 1 and 2 are not supported 91 */ 92 typedef enum { 93 MXC_SPIXF_MODE_0 = 0, 94 MXC_SPIXF_MODE_3 = 3, 95 } mxc_spixf_mode_t; 96 97 /** 98 * @brief Select page size. 99 */ 100 typedef enum { 101 MXC_SPIXF_4B, 102 MXC_SPIXF_8B, 103 MXC_SPIXF_16B, 104 MXC_SPIXF_32B, 105 } mxc_spixf_page_size_t; 106 107 /** 108 * @brief Header units. 109 */ 110 typedef enum { 111 MXC_SPIXF_HEADER_UNITS_BITS, 112 MXC_SPIXF_HEADER_UNITS_BYTES, 113 MXC_SPIXF_HEADER_UNITS_PAGES, 114 } mxc_spixf_hdr_units_t; 115 116 /** 117 * @brief Number of data lines to use. 118 */ 119 typedef enum { 120 MXC_SPIXF_WIDTH_1, ///< 1 Data Line. 121 MXC_SPIXF_WIDTH_2, ///< 2 Data Lines (x2). 122 MXC_SPIXF_WIDTH_4, ///< 4 Data Lines (x4). 123 } mxc_spixf_width_t; 124 125 /** 126 * @brief MXC_SPIXF configuration type. 127 */ 128 typedef struct { 129 mxc_spixf_mode_t mode; ///< MXC_SPIXF mode to use, 0-3. 130 mxc_spixf_sspol_t 131 ssel_pol; ///< Mask of active levels for slave select signals, use mxc_spixf_ssel_t. 132 uint32_t hz; ///< SPI Frequency in Hz. 133 } mxc_spixf_cfg_t; 134 135 /** 136 * @brief Slave select active timing 137 */ 138 typedef enum { 139 MXC_SPIXF_SYS_CLOCKS_0, 140 MXC_SPIXF_SYS_CLOCKS_2, 141 MXC_SPIXF_SYS_CLOCKS_4, 142 MXC_SPIXF_SYS_CLOCKS_8, 143 } mxc_spixf_ssact_t; 144 145 /** 146 * @brief Slave select Inactive timing 147 */ 148 typedef enum { 149 MXC_SPIXF_SYS_CLOCKS_1, ///< 1 system clocks 150 MXC_SPIXF_SYS_CLOCKS_3, ///< 3 system clocks 151 MXC_SPIXF_SYS_CLOCKS_5, ///< 5 system clocks 152 MXC_SPIXF_SYS_CLOCKS_9, ///< 9 system clocks 153 } mxc_spixf_ssiact_t; 154 155 /** 156 * @brief Data Width, # of data I/O used to rcv data 157 */ 158 typedef enum { 159 MXC_SPIXF_SINGLE_SDIO, 160 MXC_SPIXF_DUAL_SDIO, 161 MXC_SPIXF_QUAD_SDIO, 162 MXC_SPIXF_INVALID, 163 } mxc_spixf_spiwidth_t; 164 165 /** 166 * @brief IO pullup/pulldown Control 167 */ 168 typedef enum { 169 MXC_SPIXF_TRISTATE = MXC_S_SPIXFM_IO_CTRL_PU_PD_CTRL_TRI_STATE, 170 MXC_SPIXF_PULL_UP = MXC_S_SPIXFM_IO_CTRL_PU_PD_CTRL_PULL_UP, 171 MXC_SPIXF_PULL_DOWN = MXC_S_SPIXFM_IO_CTRL_PU_PD_CTRL_PULL_DOWN, 172 } mxc_spixf_pup_t; 173 174 /** 175 * @brief SPIXF drive strentgh 176 * 177 */ 178 typedef enum { MXC_SPIXF_LOW = 0, MXC_SPIXF_HIGH } mxc_spixf_ds_t; 179 180 /** 181 * @brief MXC_SPIXF Transaction request. 182 */ 183 typedef struct mxc_spixf_req mxc_spixf_req_t; 184 185 /** 186 * @brief Callback for asynchronous request. 187 * @param mxc_spixf_req_t* Pointer to the transaction request. 188 * @param int Error code. 189 */ 190 typedef void (*spixr_complete_cb_t)(mxc_spixf_req_t *, int); 191 192 struct mxc_spixf_req { 193 uint8_t deass; ///< De-assert slave select at the end of the transaction. 194 uint8_t wait_tx; ///< Wait for the TX FIFO to be empty before returning. 195 const uint8_t *tx_data; ///< TX buffer. 196 uint8_t *rx_data; ///< RX buffer. 197 mxc_spixf_width_t width; ///< Number of data lines to use 198 unsigned len; ///< Number of bytes to send. 199 unsigned read_num; ///< Number of bytes read. 200 unsigned write_num; ///< Number of bytes written. 201 spixr_complete_cb_t callback; ///< callback function 202 }; 203 204 /***** Globals *****/ 205 206 /***** Function Prototypes *****/ 207 /** 208 * @brief Setup MXC_SPIXF for Execute in Place 209 * 210 * @param cmdval command for the external flash chip. 211 * @param frequency Frequency of transmission 212 * 213 * @return None 214 */ 215 int MXC_SPIXF_Init(uint32_t cmdval, uint32_t frequency); 216 217 /** 218 * @brief Shutdown MXC_SPIXF module. 219 */ 220 void MXC_SPIXF_Shutdown(void); 221 222 /** 223 * @brief Setup Drive Strength on the I/O pins 224 * 225 * @param sclk_ds SCLK drive strength 226 * @param ss_ds Slave Select Drive Strength 227 * @param sdio_ds SDIO Drive Strength 228 * @param pupdctrl IO Pullup/Pulldown Control 229 */ 230 void MXC_SPIXF_IOCtrl(mxc_spixf_ds_t sclk_ds, mxc_spixf_ds_t ss_ds, mxc_spixf_ds_t sdio_ds, 231 mxc_spixf_pup_t pupdctrl); 232 233 /** 234 * @brief Send Clock cycles on SCK without reading or writing. 235 * 236 * @param len Number of clock cycles to send. 237 * @param deass De-assert slave select at the end of the transaction. 238 * 239 * @return Cycles transacted if everything is successful, error if 240 * unsuccessful. 241 */ 242 int MXC_SPIXF_Clocks(uint32_t len, uint8_t deass); 243 244 /** 245 * @brief Read/write MXC_SPIXF data. Will block until transaction is 246 * complete. 247 * 248 * @param req Request for a MXC_SPIXF transaction. 249 * @note Callback is ignored. 250 * 251 * @return Bytes transacted if everything is successful, error if 252 * unsuccessful. 253 */ 254 int MXC_SPIXF_Transaction(mxc_spixf_req_t *req); 255 256 /** 257 * @brief Asynchronously read/write MXC_SPIXF data. 258 * 259 * @param req Request for a MXC_SPIXF transaction. 260 * @note Request structure must remain allocated until callback. 261 * 262 * @return See \ref MXC_Error_Codes for the list of error return codes. 263 */ 264 int MXC_SPIXF_TransactionAsync(mxc_spixf_req_t *req); 265 266 /** 267 * @brief Abort asynchronous request. 268 * 269 * @param req Pointer to request for a MXC_SPIXF transaction. 270 * 271 * @return See \ref MXC_Error_Codes for the list of error return codes. 272 */ 273 int MXC_SPIXF_AbortAsync(mxc_spixf_req_t *req); 274 275 /** 276 * @brief MXC_SPIXF interrupt handler. 277 * @details This function should be called by the application from the 278 * interrupt handler if MXC_SPIXF interrupts are enabled. 279 * Alternately, this function can be periodically called by the 280 * application if MXC_SPIXF interrupts are disabled. 281 */ 282 void MXC_SPIXF_Handler(void); 283 284 /** 285 * @brief Attempt to prepare the MXC_SPIXF for sleep. 286 * 287 * @return See \ref MXC_Error_Codes for the list of error return codes. 288 */ 289 int MXC_SPIXF_ReadyForSleep(void); 290 291 /** 292 * @brief Enable Interrupts 293 * 294 * @param[in] mask The mask for the interrupts to enable 295 * 296 * @return See \ref MXC_Error_Codes for the list of error return codes. 297 */ 298 int MXC_SPIXF_EnableInt(uint32_t mask); 299 300 /** 301 * @brief Disable Interrupts 302 * 303 * @param[in] mask The mask for the interrupts to enable 304 * 305 * @return See \ref MXC_Error_Codes for the list of error return codes. 306 */ 307 int MXC_SPIXF_DisableInt(uint32_t mask); 308 309 /** 310 * @brief Clear Flags that have been set 311 * 312 * @param[in] flags The flags to be cleared 313 * 314 * @return See \ref MXC_Error_Codes for the list of error return codes. 315 */ 316 int MXC_SPIXF_ClearFlags(uint32_t flags); 317 318 /** 319 * @brief Get Flags of Interrupts of Flags that have been set. 320 * 321 * @return the Flags that are set 322 */ 323 int MXC_SPIXF_GetFlags(void); 324 325 //Low level 326 327 /** 328 * @brief Sets the SPI Mode 329 * 330 * @param[in] mode The enum that corresponds to the SPI Mode 331 * 332 * @return See \ref MXC_Error_Codes for the list of error return codes. 333 */ 334 int MXC_SPIXF_SetMode(mxc_spixf_mode_t mode); 335 336 /** 337 * @brief Get which mode that spixf is currently set for 338 * 339 * @return returns the enum for spi 0 or spi3 340 */ 341 mxc_spixf_mode_t MXC_SPIXF_GetMode(void); 342 343 /** 344 * @brief Set the slave select polarity to high or low 345 * 346 * @return See \ref MXC_Error_Codes for the list of error return codes. 347 */ 348 int MXC_SPIXF_SetSSPolActiveHigh(void); 349 350 /** 351 * @brief Set the slave select polarity to high or low 352 * 353 * @return See \ref MXC_Error_Codes for the list of error return codes. 354 */ 355 int MXC_SPIXF_SetSSPolActiveLow(void); 356 357 /** 358 * @brief Get the current slave select polarity 359 * 360 * @return Active High is (0), Active Low is (1) 361 */ 362 int MXC_SPIXF_GetSSPolarity(void); 363 364 /** 365 * @brief Sets both the read and write SPI clock frequency to the given value. 366 * 367 * @param[in] hz The frequency the spi will communicating at. 368 * 369 * @return See \ref MXC_Error_Codes for the list of error return codes. 370 */ 371 int MXC_SPIXF_SetSPIFrequency(unsigned int hz); 372 373 /** 374 * @brief Sets the SPI clock frequency for read operations. 375 * 376 * @param[in] hz The frequency the spi will communicating at. 377 * 378 * @return See \ref MXC_Error_Codes for the list of error return codes. 379 */ 380 int MXC_SPIXF_SetSPIFrequencyRead(unsigned int hz); 381 382 /** 383 * @brief Sets the SPI clock frequency for write operations. 384 * 385 * @param[in] hz The frequency the spi will communicating at. 386 * 387 * @return See \ref MXC_Error_Codes for the list of error return codes. 388 */ 389 int MXC_SPIXF_SetSPIFrequencyWrite(unsigned int hz); 390 391 /** 392 * @brief Get the current SPI clock frequency. If the read and write clock 393 * frequencies have been set to different values, this function will 394 * return the read frequency. 395 * 396 * @return The current frequency that the SPI is communicating at. 397 */ 398 uint32_t MXC_SPIXF_GetSPIFrequency(void); 399 400 /** 401 * @brief Get the current SPI clock frequency for read operations. 402 * 403 * @return The current frequency that the SPI is communicating at. 404 */ 405 uint32_t MXC_SPIXF_GetSPIFrequencyRead(void); 406 407 /** 408 * @brief Get the current SPI clock frequency for write operations. 409 * 410 * @return The current frequency that the SPI is communicating at. 411 */ 412 uint32_t MXC_SPIXF_GetSPIFrequencyWrite(void); 413 414 /** 415 * @brief Set the slave select active timing. This will control the delay from assertion of slave select to start 416 * of the SCK pulse and delay from the end of SCK pulse to de-assertion of slave select. 417 * 418 * @param[in] ssact The enum that corresponds with 0,2,4,8 clocks of delay 419 * 420 * @return See \ref MXC_Error_Codes for the list of error return codes. 421 * 422 */ 423 int MXC_SPIXF_SetSSActiveTime(mxc_spixf_ssact_t ssact); 424 425 /** 426 * @brief Get the slave select active timing setting. 427 * 428 * @return gives the enum value that corresponds to 0,2,4,8 clocks of delay 429 * that ss is currently set at. 430 */ 431 mxc_spixf_ssact_t MXC_SPIXF_GetSSActiveTime(void); 432 433 /** 434 * @brief Set slave select inactive timing to delay from de-assertion of 435 * slave select to re-assertion of slave select for another spi 436 * transaction. 437 * 438 * @param[in] ssiact The enum that corresponds to a 1,3,5,9 clock delay 439 * 440 * @return See \ref MXC_Error_Codes for the list of error return codes. 441 */ 442 int MXC_SPIXF_SetSSInactiveTime(mxc_spixf_ssiact_t ssiact); 443 444 /** 445 * @brief Get slave select inactive timing to delay from de-assertion of slave select to re-assertion of 446 * slave select for another spi transaction. 447 * 448 * @return The enum that corresponds to a 1,3,5,9 clock delay 449 */ 450 mxc_spixf_ssiact_t MXC_SPIXF_GetSSInactiveTime(void); 451 452 /** 453 * @brief Set Number of data I/O used to send commands 454 * 455 * @param[in] width Enum that corresponds to single, dual, quad SDIO. 456 * 457 * @return See \ref MXC_Error_Codes for the list of error return codes. 458 */ 459 int MXC_SPIXF_SetCmdWidth(mxc_spixf_spiwidth_t width); 460 461 /** 462 * @brief Get number of data I/O expected to be used for commands 463 * 464 * @return Enum that corresponds to single, dual, quad SDIO 465 */ 466 mxc_spixf_spiwidth_t MXC_SPIXF_GetCmdWidth(void); 467 468 /** 469 * @brief Set Number of data I/O used to send address 470 * 471 * @param[in] width Enum that corresponds to single, dual, quad SDIO. 472 * 473 * @return See \ref MXC_Error_Codes for the list of error return codes. 474 */ 475 int MXC_SPIXF_SetAddrWidth(mxc_spixf_spiwidth_t width); 476 477 /** 478 * @brief Get number of data I/O expected to be used for address 479 * 480 * @return Enum that corresponds to single, dual, quad SDIO 481 */ 482 mxc_spixf_spiwidth_t MXC_SPIXF_GetAddrWidth(void); 483 484 /** 485 * @brief Set Number of data I/O used to send data 486 * 487 * @param[in] width Enum that corresponds to single, dual, quad SDIO. 488 * 489 * @return See \ref MXC_Error_Codes for the list of error return codes. 490 */ 491 int MXC_SPIXF_SetDataWidth(mxc_spixf_spiwidth_t width); 492 493 /** 494 * @brief Get number of data I/O expected to be used for data 495 * 496 * @return Enum that corresponds to single, dual, quad SDIO 497 */ 498 mxc_spixf_spiwidth_t MXC_SPIXF_GetDataWidth(void); 499 500 /** 501 * @brief Set address mode to be 4 byte address 502 * 503 * @return See \ref MXC_Error_Codes for the list of error return codes. 504 */ 505 int MXC_SPIXF_Set4ByteAddr(void); 506 507 /** 508 * @brief Set address mode to be 3 byte address 509 * 510 * @return See \ref MXC_Error_Codes for the list of error return codes. 511 */ 512 int MXC_SPIXF_Set3ByteAddr(void); 513 514 /** 515 * @brief Get number of bytes in address 516 * 517 * @return 3-byte address (3) or 4-byte address (4) 518 */ 519 unsigned int MXC_SPIXF_GetBytesPerAddr(void); 520 521 /** 522 * @brief Set number of SPI clocks needed during the mode/dummy phase of 523 * fetch 524 * 525 * @param[in] mdclk The number of clocks from 0-15 526 * 527 * @return See \ref MXC_Error_Codes for the list of error return codes. 528 */ 529 int MXC_SPIXF_SetModeClk(uint8_t mdclk); 530 531 /** 532 * @brief Get number of SPI clocks being used for the mode/dummy phase of 533 * fetch 534 * 535 * @return the number of clocks mode clock is set at. 536 */ 537 uint8_t MXC_SPIXF_GetModeClk(void); 538 539 /** 540 * @brief Set command value for spi transaction 541 * 542 * @param[in] cmdval 543 * 544 * @return See \ref MXC_Error_Codes for the list of error return codes. 545 */ 546 int MXC_SPIXF_SetCmdValue(uint8_t cmdval); 547 548 /** 549 * @brief Set command mode to send read a command every time a spi 550 * transaction is initiated 551 * 552 * @return See \ref MXC_Error_Codes for the list of error return codes. 553 */ 554 int MXC_SPIXF_SetCmdModeEveryTrans(void); 555 556 /** 557 * @brief Set command mode to send a read a command the first transaction. 558 */ 559 int MXC_SPIXF_SetCmdModeFirstTrans(void); 560 561 /** 562 * @brief Get Command mode 563 * 564 * @return When the read command is sent. It will be either every time (0) or First transaction only (1). 565 */ 566 mxc_spixf_cmd_t MXC_SPIXF_GetCmdMode(void); 567 568 /** 569 * @brief Enable bits to be in bit bang output mode 570 * 571 * @param[in] mask Enable output bit bang on specific bits so bit 3 set will 572 * enable bit 3 573 * 574 * @return See \ref MXC_Error_Codes for the list of error return codes. 575 */ 576 int MXC_SPIXF_BBDataOutputEnable(uint8_t mask); 577 578 /** 579 * @brief Disable bits to not be in bit bang output mode 580 * 581 * @param[in] mask Disable output bit bang on specific bits so bit 3 set will 582 * disable bit 3 583 * 584 * @return See \ref MXC_Error_Codes for the list of error return codes. 585 */ 586 int MXC_SPIXF_BBDataOutputDisable(uint8_t mask); 587 588 /** 589 * @brief Get if bit bang output mode is enabled or disabled for all bits 590 * 591 * @return Returns if Output bit bang is enabled (1) or disabled (0) in bits 592 * 0:3 corresponding with sdio0:sdio3 593 */ 594 uint8_t MXC_SPIXF_BBDataOutputIsEnabled(void); 595 596 /** 597 * @brief Get Output data value 598 * 599 * @return Returns output data value of a 1 or 0 in bits 0:3 corresponding with sdio0:sdio3 600 */ 601 uint8_t MXC_SPIXF_GetBBDataOutputValue(void); 602 603 /** 604 * @brief Get Input data value 605 * 606 * @return Returns input data value of a 1 or 0 in bits 0:3 corresponding with sdio0:sdio3 607 */ 608 uint8_t MXC_SPIXF_GetBBDataInputValue(void); 609 610 /** 611 * @brief Set the data to send with the dummy clocks 612 * 613 * @param[in] data The data to send 614 * 615 * @return See \ref MXC_Error_Codes for the list of error return codes. 616 */ 617 int MXC_SPIXF_SetModeData(uint16_t data); 618 619 /** 620 * @brief Get the data that is supposed to send with the dummy clocks 621 * 622 * @return the data being sent with dummy clocks 623 */ 624 uint16_t MXC_SPIXF_GetModeData(void); 625 626 /** 627 * @brief Set SCK to be inverted 628 * 629 * @return See \ref MXC_Error_Codes for the list of error return codes. 630 */ 631 int MXC_SPIXF_SetSCKInverted(void); 632 633 /** 634 * @brief Set SCK to be non-inverted 635 * 636 * @return See \ref MXC_Error_Codes for the list of error return codes. 637 */ 638 int MXC_SPIXF_SetSCKNonInverted(void); 639 640 /** 641 * @brief Get weather SCK is inverted or non-inverted 642 * 643 * @return Enum that corresponds to Inverted (1) or non-inverted (0) 644 */ 645 int MXC_SPIXF_GetSCKInverted(void); 646 647 /** 648 * @brief Enable SCK Feedback 649 * 650 * @return See \ref MXC_Error_Codes for the list of error return codes. 651 */ 652 int MXC_SPIXF_SCKFeedbackEnable(void); 653 654 /** 655 * @brief Disable SCK Feedback 656 * 657 * @return See \ref MXC_Error_Codes for the list of error return codes. 658 */ 659 int MXC_SPIXF_SCKFeebackDisable(void); 660 661 /** 662 * @brief Get if SCK Feedback is enabled or disabled 663 * 664 * @return Returns if feedback mode is Enabled (1) or disabled (0). 665 */ 666 int MXC_SPIXF_SCKFeebackIsEnabled(void); 667 668 /** 669 * @brief Set SPI clock periods to delay before sampling SDIO input. This 670 * value must be less than or equal to HICLK 671 * 672 * @param[in] delay The number of clocks to delay between 0-15 673 * 674 * @return See \ref MXC_Error_Codes for the list of error return codes. 675 */ 676 int MXC_SPIXF_SetSCKSampleDelay(uint8_t delay); 677 678 /** 679 * @brief Get the Number of clocks being delayed before sampling SDIO 680 * 681 * @return get number of clocks between 0-15. 682 */ 683 uint8_t MXC_SPIXF_GetSCKSampleDelay(void); 684 685 /** 686 * @brief Set Page Size for transactions 687 * 688 * @param[in] size The size of a transaction in bytes 689 * 690 */ 691 void MXC_SPIXF_SetPageSize(mxc_spixf_page_size_t size); 692 693 /** 694 * @brief Get the current page size for a transaction 695 * 696 * @return The enum that corresponds with the current page size. 697 */ 698 mxc_spixf_page_size_t MXC_SPIXF_GetPageSize(void); 699 700 /** 701 * @brief Set to Receive only in simple mode 702 * 703 * @return See \ref MXC_Error_Codes for the list of error return codes. 704 */ 705 int MXC_SPIXF_SimpleRXEnabled(void); 706 707 /** 708 * @brief Set to Receive only in simple mode 709 * 710 * @return See \ref MXC_Error_Codes for the list of error return codes. 711 */ 712 int MXC_SPIXF_SimpleRXDisable(void); 713 714 /** 715 * @brief Get Receive only mode setting 716 * 717 * @return Returns if simple receive is enabled or disabled 718 */ 719 int MXC_SPIXF_SimpleRXIsEnabled(void); 720 721 /** 722 * @brief Enable Simple Mode 723 * 724 * @return See \ref MXC_Error_Codes for the list of error return codes. 725 */ 726 int MXC_SPIXF_SimpleModeEnable(void); 727 728 /** 729 * @brief Disable Simple Mode 730 * 731 * @return See \ref MXC_Error_Codes for the list of error return codes. 732 */ 733 int MXC_SPIXF_SimpleModeDisable(void); 734 735 /** 736 * @brief Get if Simple mode is enabled or disabled 737 * 738 * @return Returns if simple mode is enabled or disabled 739 */ 740 int MXC_SPIXF_SimpleModeIsEnabled(void); 741 742 /** 743 * @brief Enable bit bang sample output mode on spefic bits 744 * 745 * @param[in] mask Enable sample output bit bang mode. so bit 3 set will 746 * enable bit 3 747 * 748 * @return See \ref MXC_Error_Codes for the list of error return codes. 749 */ 750 int MXC_SPIXF_SampleOutputEnable(uint8_t mask); 751 752 /** 753 * @brief Disable bit bang sample output mode on spefic bits 754 * 755 * @param[in] mask Disable sample output bit bang mode. so bit 3 set will 756 * disable bit 3 757 * 758 * @return See \ref MXC_Error_Codes for the list of error return codes. 759 */ 760 int MXC_SPIXF_SampleOutputDisable(uint8_t mask); 761 762 /** 763 * @brief Get if sample output bit bang is enabled or disabled 764 * 765 * @return Returns sample output bit bang mode if a 1 (enabled) or 0 766 * (disabled) in bits 0:3 corresponding with sdio0:sdio3 767 */ 768 uint8_t MXC_SPIXF_SampleOutputIsEnabled(void); 769 770 /** 771 * @brief Get bit bang sample output value 772 * 773 * @return Returns sample output bit bang value of a 1 or 0 in bits 0:3 774 * corresponding with sdio0:sdio3 775 */ 776 uint8_t MXC_SPIXF_GetSampleOutputValue(void); 777 778 /** 779 * @brief Drive SCK High 780 */ 781 void MXC_SPIXF_SetSCKDriveHigh(void); 782 783 /** 784 * @brief Drive SCK Low 785 */ 786 void MXC_SPIXF_SetSCKDriveLow(void); 787 788 /** 789 * @brief Get if SCK is high or low 790 * 791 * @return returns 1 if High, 0 if Low 792 */ 793 uint8_t MXC_SPIXF_GetSCKDrive(void); 794 795 /** 796 * @brief Set Slave select in bit bang mode to a 1 797 */ 798 void MXC_SPIXF_SetSSDriveOutputHigh(void); 799 800 /** 801 * @brief Set Slave select in bit bang mode to a 0 802 */ 803 void MXC_SPIXF_SetSSDriveOutputLow(void); 804 805 /** 806 * @brief Get current slave select output 807 * 808 * @return 0 or 1 based on output of line. 809 */ 810 uint8_t MXC_SPIXF_GetSSDriveOutput(void); 811 812 /** 813 * @brief Enable bit bang mode 814 * 815 * @return See \ref MXC_Error_Codes for the list of error return codes. 816 */ 817 int MXC_SPIXF_BitBangModeEnable(void); 818 819 /** 820 * @brief Disable bit bang mode 821 * 822 * @return See \ref MXC_Error_Codes for the list of error return codes. 823 */ 824 int MXC_SPIXF_BitBangModeDisable(void); 825 826 /** 827 * @brief Is Bit bang mode enabled or disabled 828 * 829 * @return Bit bang mode is enabled (1) or disabled (0) 830 */ 831 int MXC_SPIXF_BitBangModeIsEnabled(void); 832 833 /** 834 * @brief RX FIFO (results fifo) enable 835 * 836 * @return See \ref MXC_Error_Codes for the list of error return codes. 837 */ 838 int MXC_SPIXF_RXFIFOEnable(void); 839 840 /** 841 * @brief RX FIFO (results fifo) disable 842 * 843 * @return See \ref MXC_Error_Codes for the list of error return codes. 844 */ 845 int MXC_SPIXF_RXFIFODisable(void); 846 847 /** 848 * @brief Is RX FIFO (results fifo) enabled or disabled 849 * 850 * @return RX FIFO is enabled (1) or disabled (0) 851 */ 852 int MXC_SPIXF_RXFIFOIsEnabled(void); 853 854 /** 855 * @brief TX FIFO (Transaction FIFO) enable 856 * 857 * @return See \ref MXC_Error_Codes for the list of error return codes. 858 */ 859 int MXC_SPIXF_TXFIFOEnable(void); 860 861 /** 862 * @brief TX FIFO (Transaction FIFO) disable 863 * 864 * @return See \ref MXC_Error_Codes for the list of error return codes. 865 */ 866 int MXC_SPIXF_TXFIFODisable(void); 867 868 /** 869 * @brief Is TX FIFO (Transaction FIFO) Enabled or Disabled 870 * 871 * @return TX FIFO is enabled (1) or disabled (0) 872 */ 873 int MXC_SPIXF_TXFIFOIsEnabled(void); 874 875 /** 876 * @brief Enables SPIXF but doesnt change any configurations 877 * 878 * @return See \ref MXC_Error_Codes for the list of error return codes. 879 */ 880 int MXC_SPIXF_Enable(void); 881 882 /** 883 * @brief Disables SPIXF but doesnt change any configurations 884 * 885 * @return See \ref MXC_Error_Codes for the list of error return codes. 886 */ 887 int MXC_SPIXF_Disable(void); 888 889 /** 890 * @brief Is SPIXF Enabled or Disabled 891 * 892 * @return SPIXF is enabled (1) or disabled (0) 893 */ 894 int MXC_SPIXF_IsEnabled(void); 895 896 /** 897 * @brief Set IOCTRL SDIO Drive to High 898 */ 899 void MXC_SPIXF_SetIoctrlSDIODriveHigh(void); 900 901 /** 902 * @brief Set IOCTRL SDIO Drive to Low 903 */ 904 void MXC_SPIXF_SetIoctrlSDIODriveLow(void); 905 906 /** 907 * @brief Get IOCTRL SDIO Drive 908 * 909 * @return 1 = high or 0 = low 910 */ 911 uint8_t MXC_SPIXF_GetIoctrlSDIODrive(void); 912 913 /** 914 * @brief Set IOCTRL SCLK Drive to High 915 */ 916 void MXC_SPIXF_SetIoctrlSCLKDriveHigh(void); 917 918 /** 919 * @brief Set IOCTRL SCLK Drive to Low 920 */ 921 void MXC_SPIXF_SetIoctrlSCLKDriveLow(void); 922 923 /** 924 * @brief Get IOCTRL SCLK Drive 925 * 926 * @return 1= high or 0 = low 927 */ 928 uint8_t MXC_SPIXF_GetIoctrlSCLKDrive(void); 929 930 /** 931 * @brief Set IOCTRL SS Drive to High 932 */ 933 void MXC_SPIXF_SetIoctrlSSDriveHigh(void); 934 935 /** 936 * @brief Set IOCTRL SS Drive to Low 937 */ 938 void MXC_SPIXF_SetIoctrlSSDriveLow(void); 939 940 /** 941 * @brief Get IOCTRL SS Drive 942 * 943 * @return 1 = high or 0 = low 944 */ 945 uint8_t MXC_SPIXF_GetIoctrlSSDrive(void); 946 947 /** 948 * @brief Set pull up pull down 949 * 950 * @param[in] pupd The enum corresponding to Pull up pull down states 951 */ 952 void MXC_SPIXF_SetPuPdCtrl(mxc_spixf_pup_t pupd); 953 954 /** 955 * @brief Get what setting the pull up pull down is set to 956 * 957 * @return the enum value for pull up pull down state 958 */ 959 uint8_t MXC_SPIXF_GetPuPdCtrl(void); 960 961 /** 962 * @brief Set bus idle to a time where ss will be deactivated if timer runs out 963 * 964 * @param[in] busidle The time before the timer runs out 965 * 966 * @return See \ref MXC_Error_Codes for the list of error return codes. 967 */ 968 int MXC_SPIXF_SetBusIdle(unsigned int busidle); 969 970 /** 971 * @brief Get Bus Idle time 972 * 973 * @return the time the bus will idle before deactivating slave select. 974 */ 975 unsigned int MXC_SPIXF_GetBusIdle(void); 976 977 /** 978 * @defgroup spixfm SPI External Flash Master (SPIXFM) 979 * @ingroup spixf 980 * @{ 981 */ 982 /**@} end of group spixfm */ 983 984 /** 985 * @defgroup spixfc SPI External Flash Controller (SPIXFC) 986 * @ingroup spixf 987 * @{ 988 */ 989 /**@} end of group spixfc */ 990 /** 991 * @defgroup spixfc_fifo SPI External Flash Controller FIFO (SPIXFC_FIFO) 992 * @ingroup spixf 993 * @{ 994 */ 995 /**@} end of group spixfc_fifo */ 996 997 /**@} end of group spixf */ 998 999 #ifdef __cplusplus 1000 } 1001 #endif 1002 1003 #endif // LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32665_SPIXF_H_ 1004