Ignore:
Timestamp:
Sep 14, 2020, 6:36:03 PM (4 years ago)
Author:
coas-nagasima
Message:

SPIとSerial、KPUの動作を改善

File:
1 edited

Legend:

Unmodified
Added
Removed
  • azure_iot_hub_riscv/trunk/app_iothub_client/src/kpu_main.c

    r453 r458  
    3838*  の責任を負わない.
    3939*
    40 *  $Id$
     40*  $Id: kpu_main.c 2176 2020-08-19 23:50:05Z coas-nagasima $
    4141*/
    4242
     
    6363#include "kpu.h"
    6464#include "region_layer.h"
    65 
    66 extern void ai_dma_done_isr(DMA_Handle_t *dma);
    6765
    6866/*
     
    187185static uint32_t lable_string_draw_ram[115 * 16 * 8 / 2];
    188186#endif
    189 extern uint8_t model_data[];
     187extern const uint8_t model_data[];
    190188kpu_model_context_t g_task;
    191189static region_layer_t detect_rl;
     
    234232        OV2640_t        *hcmr;
    235233        DVP_Handle_t    *hdvp;
    236         uint16_t        *lcd_buffer;
    237234        ER_UINT ercd;
    238         uint32_t i, count;
     235        uint32_t i;
    239236        struct tm2 time;
    240237        unsigned long atmp;
     
    371368        syslog_1(LOG_NOTICE, "OV2640 id(%d)", ov2640_id(hcmr));
    372369
    373         Init.WorkMode     = SPI_WORK_MODE_0;
     370        Init.WorkMode     = SPI_WORK_MODE_2;
    374371        Init.FrameFormat  = SPI_FF_OCTAL;
    375372        Init.DataSize     = 8;
     
    385382        Init.SsPin        = SIPEED_ST7789_SS_PIN;
    386383        Init.SsNo         = SIPEED_ST7789_SS;
    387         Init.TxDMAChannel = SIPEED_DMA_CH;
     384        Init.TxDMAChannel = -1;
    388385        Init.RxDMAChannel = -1;
    389386        Init.semid        = SPI1TRN_SEM;
     
    408405        lcd_init(hlcd);
    409406        syslog_2(LOG_NOTICE, "width(%d) height(%d)", hlcd->_width, hlcd->_height);
    410         count = hcmr->_width * hcmr->_height;
    411         lcd_buffer = (uint16_t *)malloc(count * 2);
    412         if(lcd_buffer == NULL){
    413                 syslog_0(LOG_ERROR, "no lcd buffer !");
    414                 slp_tsk();
    415         }
     407
    416408        DrawProp.BackColor = ST7789_WHITE;
    417409        DrawProp.TextColor = ST7789_BLACK;
     
    466458                syslog_0(LOG_ERROR, "SD-CARD INITAIL ERROR !");
    467459#endif
    468         extern DMA_Handle_t g_ai_hdma;
    469         g_ai_hdma.chnum = AI_DMA_CH;
    470         g_ai_hdma.xfercallback = ai_dma_done_isr;
    471         g_ai_hdma.errorcallback     = NULL;
    472         g_ai_hdma.Init.Request      = DMA_SELECT_AI_RX_REQ;     /* DMA選択 */
    473         g_ai_hdma.Init.Direction    = DMA_PERIPH_TO_MEMORY;     /* DMA転送方向 */
    474         g_ai_hdma.Init.SrcMultBlock = DMAC_MULTBLOCK_CONT;      /* ソースマルチブロックタイプ */
    475         g_ai_hdma.Init.DrcMultBlock = DMAC_MULTBLOCK_CONT;      /* デスティネーションマルチブロックタイプ */
    476         g_ai_hdma.Init.SrcHandShake = DMAC_HS_HARDWARE; /* ソースハンドシェイク */
    477         g_ai_hdma.Init.DrcHandShake = DMAC_HS_SOFTWARE; /* デスティネーションハンドシェイク */
    478         g_ai_hdma.Init.SrcHwhsPol   = DMAC_HWHS_POLARITY_LOW;   /* ソースハードウェアハンドシェイク極性 */
    479         g_ai_hdma.Init.DrcHwhsPol   = DMAC_HWHS_POLARITY_LOW;   /* デスティネーションハードウェアハンドシェイク極性 */
    480         g_ai_hdma.Init.Priority     = 4;        /* 優先度 */
    481         g_ai_hdma.Init.SrcMaster    = DMAC_MASTER1;     /* ソースマスター設定 */
    482         g_ai_hdma.Init.DstMaster    = DMAC_MASTER2;     /* デスティネーションマスター設定 */
    483         g_ai_hdma.Init.SrcInc       = DMAC_ADDR_NOCHANGE;       /* ソースインクリメント設定 */
    484         g_ai_hdma.Init.DstInc       = DMAC_ADDR_INCREMENT;      /* デスティネーションインクリメント設定 */
    485         g_ai_hdma.Init.SrcTransWidth = DMAC_TRANS_WIDTH_32;     /* ソース転送幅 */
    486         g_ai_hdma.Init.DstTransWidth = DMAC_TRANS_WIDTH_32;     /* デスティネーション転送幅 */
    487         g_ai_hdma.Init.SrcBurstSize = DMAC_MSIZE_4;     /* ソースバーストサイズ */
    488         g_ai_hdma.Init.DstBurstSize = DMAC_MSIZE_4;     /* デスティネーションバーストサイズ */
    489         g_ai_hdma.Init.IocBlkTrans  = 0;        /* IOCブロック転送 */
    490         g_ai_hdma.localdata         = (void *)&g_task;
    491         if ((ercd = dma_init(&g_ai_hdma)) != E_OK) {
    492                 syslog_0(LOG_ERROR, "AI-DMA INITAIL ERROR !");
     460        if ((ercd = kpu_init(&g_task)) != E_OK) {
     461                syslog_0(LOG_ERROR, "kpu init error");
     462                slp_tsk();
    493463        }
    494464
     
    502472        detect_rl.threshold = 0.7;
    503473        detect_rl.nms_value = 0.3;
    504         region_layer_init(&detect_rl, 10, 7, 125, 320, 240);
     474        if (region_layer_init(&detect_rl, 10, 7, 125, 320, 240) != 0) {
     475                syslog_0(LOG_ERROR, "region layer init error");
     476                slp_tsk();
     477        }
    505478
    506479        bool_t camok = true;
     
    524497                        atmp = (unsigned long)hcmr->_aiBuffer - IOMEM;
    525498                        kpu_run_kmodel(&g_task, (const uint8_t *)atmp, AI_DMA_CH, ai_done, NULL);
    526 
    527                         uint32_t *p = (uint32_t *)hcmr->_dataBuffer;
    528                         uint32_t *q = (uint32_t *)lcd_buffer;
    529                         uint32_t *e = (uint32_t *)&lcd_buffer[count];
    530                         for (; q < e ; p++, q++){
    531                                 *q = SWAP_32(*p);
    532                         }
    533499                }
    534500
     
    555521                }
    556522
    557                 lcd_drawPicture(hlcd, 0, 0, hcmr->_width, hcmr->_height, lcd_buffer);
     523                lcd_drawPicture(hlcd, 0, 0, hcmr->_width, hcmr->_height, (uint16_t *)hcmr->_dataBuffer);
    558524
    559525                /* draw boxs */
Note: See TracChangeset for help on using the changeset viewer.