对比新文件 |
| | |
| | | /* |
| | | * Copyright (c) 2019-2023 Beijing Hanwei Innovation Technology Ltd. Co. and |
| | | * its subsidiaries and affiliates (collectly called MKSEMI). |
| | | * |
| | | * All rights reserved. |
| | | * |
| | | * Redistribution and use in source and binary forms, with or without |
| | | * modification, are permitted provided that the following conditions are met: |
| | | * |
| | | * 1. Redistributions of source code must retain the above copyright notice, |
| | | * this list of conditions and the following disclaimer. |
| | | * |
| | | * 2. Redistributions in binary form, except as embedded into an MKSEMI |
| | | * integrated circuit in a product or a software update for such product, |
| | | * must reproduce the above copyright notice, this list of conditions and |
| | | * the following disclaimer in the documentation and/or other materials |
| | | * provided with the distribution. |
| | | * |
| | | * 3. Neither the name of MKSEMI nor the names of its contributors may be used |
| | | * to endorse or promote products derived from this software without |
| | | * specific prior written permission. |
| | | * |
| | | * 4. This software, with or without modification, must only be used with a |
| | | * MKSEMI integrated circuit. |
| | | * |
| | | * 5. Any software provided in binary form under this license must not be |
| | | * reverse engineered, decompiled, modified and/or disassembled. |
| | | * |
| | | * THIS SOFTWARE IS PROVIDED BY MKSEMI "AS IS" AND ANY EXPRESS OR IMPLIED |
| | | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
| | | * MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| | | * DISCLAIMED. IN NO EVENT SHALL MKSEMI OR CONTRIBUTORS BE LIABLE FOR ANY |
| | | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| | | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| | | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| | | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| | | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
| | | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| | | */ |
| | | |
| | | #include <stdio.h> |
| | | #include <stdlib.h> |
| | | #include <stddef.h> |
| | | #include <stdarg.h> |
| | | #include <stdbool.h> |
| | | #include <errno.h> |
| | | #include <string.h> |
| | | #include <ctype.h> |
| | | #include <stdint.h> |
| | | #include "mk_common.h" |
| | | #include "mk_uart.h" |
| | | #include "uart_in_spi.h" |
| | | |
| | | // come from uart_example |
| | | #define TEST_UART_POLL_MODE 0 |
| | | #define TEST_UART_INTERUPT_MODE 1 |
| | | #define TEST_UART_DMA_MODE 2 |
| | | #define TEST_UART_MODE TEST_UART_POLL_MODE |
| | | |
| | | #define TEST_PORT_UART UART_ID0 |
| | | |
| | | /******************************************************************************* |
| | | * @Function uart_in_spi_init |
| | | * @Parameters None. |
| | | * @Returns void. |
| | | ******************************************************************************/ |
| | | void uart_in_spi_init(void) |
| | | { |
| | | struct UART_CFG_T test_uart_cfg = |
| | | { |
| | | .parity = UART_PARITY_NONE, |
| | | .stop = UART_STOP_BITS_1, |
| | | .data = UART_DATA_BITS_8, |
| | | .flow = UART_FLOW_CONTROL_NONE, |
| | | .rx_level = UART_RXFIFO_CHAR_1, |
| | | .tx_level = UART_TXFIFO_EMPTY, |
| | | .baud = BAUD_921600, |
| | | #if (TEST_UART_MODE == TEST_UART_POLL_MODE) |
| | | .dma_en = false, |
| | | .int_rx = false, |
| | | .int_tx = false, |
| | | #elif (TEST_UART_MODE == TEST_UART_INTERUPT_MODE) |
| | | .dma_en = false, |
| | | .int_rx = true, |
| | | .int_tx = true, |
| | | #elif (TEST_UART_MODE == TEST_UART_DMA_MODE) |
| | | .dma_en = true, |
| | | .int_rx = false, |
| | | .int_tx = false, |
| | | #endif |
| | | }; |
| | | |
| | | uart_open(TEST_PORT_UART, &test_uart_cfg); |
| | | return; |
| | | } |
| | | |
| | | #define TAG_UART_CMD_START_HIGH ((uint8_t)0xf1) |
| | | #define TAG_UART_CMS_START_LOW ((uint8_t)0xbc) |
| | | |
| | | /******************************************************************************* |
| | | * |
| | | * @Function uart_receive_in_spi |
| | | * @Parameters rx_buf - the buffer for receiving the data from UART. |
| | | * buf_size - the buffer size |
| | | * callback - call back function |
| | | * @Returns the data length. |
| | | ******************************************************************************/ |
| | | int uart_receive_in_spi(uint8_t *rx_buf, uint16_t buf_size, drv_callback_t callback) |
| | | { |
| | | int ret; |
| | | uint16_t len; |
| | | uint8_t tmp_buf[8]; |
| | | |
| | | do |
| | | { |
| | | ret = uart_receive(TEST_PORT_UART, tmp_buf, 1, callback); |
| | | if ((ret != DRV_OK) || (tmp_buf[0] != TAG_UART_CMD_START_HIGH)) |
| | | { |
| | | continue; |
| | | } |
| | | ret = uart_receive(TEST_PORT_UART, tmp_buf + 1, 1, callback); |
| | | if ((ret != DRV_OK) || (tmp_buf[1] != TAG_UART_CMS_START_LOW)) |
| | | { |
| | | continue; |
| | | } |
| | | ret = uart_receive(TEST_PORT_UART, tmp_buf + 2, 2, callback); |
| | | if (ret != DRV_OK) |
| | | { |
| | | // sofCnt++; |
| | | continue; |
| | | } |
| | | len = (uint16_t)(((uint16_t)tmp_buf[2] << 8) + tmp_buf[3]); |
| | | if ((len < 5) || (len > (255 + 5))) |
| | | { |
| | | continue; |
| | | } |
| | | else |
| | | { |
| | | break; |
| | | } |
| | | } while (1); // (sofCnt < sofMaxCnt); |
| | | |
| | | ret = uart_receive(TEST_PORT_UART, rx_buf, len, callback); |
| | | if (ret != DRV_OK) |
| | | { |
| | | return ret; |
| | | } |
| | | else |
| | | { |
| | | return len; |
| | | } |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * |
| | | * @Function uart_send_in_spi |
| | | * @Parameters tx_buf - the buffer for sending the data from UART. |
| | | * len - the data size |
| | | * callback - call back function |
| | | * @Returns tx status. |
| | | ******************************************************************************/ |
| | | int uart_send_in_spi(uint8_t *tx_buf, uint16_t len, drv_callback_t callback) |
| | | { |
| | | return uart_send(TEST_PORT_UART, tx_buf, len, callback); |
| | | } |