/
eam7
/
CH592
Обзор
Документация
Войти
/
eam7
/
CH592
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
USB_CDC/User/Main.c
146 строк
7 KB
admin
Simplify
04 авг 2024, 20:33
04 авг 2024, 20:33
92fec99
Код
Авторство
О чём код?
/* Пример CDC USB-устройства Полезно для вывода логов через USB и не только */ #include "CH59x_common.h" #include "include/usb.h" #include "CH59x_timer.h" __attribute__((aligned(4))) uint32_t CapBuf[350]; __attribute__((aligned(4))) uint32_t PwmBuf[2000]; volatile uint8_t capFlag = 0; __attribute__((aligned(4))) uint32_t g_cmd[64]; volatile uint8_t g_gotComand = 0; void MyUSBCallbackType(UINT8 *p_send_dat, UINT8 len) { // log2(p_send_dat, len); // my_log("==========================\n"); // my_log("+%04ld+\n", p_send_dat[0]); // memcpy(&g_cmd, p_send_dat, len); for (int j = 0; j < (64 / 4); j++) ((UINT32*) g_cmd)[j] = ((UINT32*) p_send_dat)[j]; g_gotComand = 1; } int main() { // uint8_t i; SetSysClock(CLK_SOURCE_PLL_60MHz); InitUSBDevPara(); InitCDCDevice(&MyUSBCallbackType); PFIC_EnableIRQ(USB_IRQn); GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeOut_PP_20mA); PWR_UnitModCfg(DISABLE, UNIT_SYS_LSE); GPIOA_ResetBits(GPIO_Pin_10); GPIOA_ModeCfg(GPIO_Pin_10, GPIO_ModeIN_PU); TMR1_CapInit(Edge_To_Edge); TMR1_CAPTimeoutCfg(0xFFFFFFFF); // ���ò���ʱʱ�� TMR1_DMACfg(ENABLE, (uint16_t)(uint32_t)&CapBuf[0], (uint16_t)(uint32_t)&CapBuf[350], Mode_Single); TMR1_ITCfg(ENABLE, TMR1_2_IT_DMA_END); // ����DMA����ж� PFIC_EnableIRQ(TMR1_IRQn); // const UINT8 INTERVALS[] = { // 8,8,1,1,1,3,1,1,1,3,1,1,1,3,1,1,1,1,8,8 // }; // GPIOB_ModeCfg(GPIO_Pin_11, GPIO_ModeOut_PP_20mA); // GPIOPinRemap(ENABLE, RB_PIN_TMR2); // PA11 -> PB11 // // TMR2_PWMCycleCfg(1578); // 60M / 38kHz // uint32_t duty = 400; // int ofs = 0; // uint32_t v = duty; // for(i=0; i<20; i++)//INTERVALS.len // { // int reps = INTERVALS[i] * 21; // for(int j=0; j<reps; j++) // { // PwmBuf[ofs+j]=v; // } // ofs += reps; // if(v>0) // { // v = 0; // } // else // { // v = duty; // } // } // TMR2_PWMInit(Low_Level, PWM_Times_1); // TMR2_DMACfg(ENABLE, (uint32_t)&PwmBuf[0], (uint32_t)&PwmBuf[ofs-1], Mode_LOOP); // TMR2_PWMEnable(); // TMR2_Enable(); // // TMR2_ClearITFlag(TMR1_2_IT_DMA_END); // TMR2_ITCfg(ENABLE, TMR1_2_IT_DMA_END); // 1600 duty= GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_20mA); // PA12 - PWM4 PWMX_CLKCfg(25); // cycle = 4/Fsys PWMX_CycleCfg(PWMX_Cycle_64); // ���� = 64*cycle PWMX_ACTOUT(CH_PWM4, 64 / 4, High_Level, ENABLE); // 25% ռ�ձ� const UINT32 INTERVALS[] = { 561152, 259143, 49677, 85562, 49204, 85933, 49229, 15301, 51734, 18435, 49557, 15311, 52487, 15367, 52054, 16829, 53419, 84456, 48872, 17915, 49230, 86077, 49074, 86468, 49175, 18261, 48940, 16135, 51488, 16617, 51291, 19126, 49184, 18361, 49145, 85859, 48885, 86442, 48830, 86571, 46880, 20570, 48850, 16812, 50883, 18977, 47222, 21002, 48864, 18596, 48485, 18380, 46636, 88681, 46710, 20453, 48618, 18892, 46849, 20904, 48349, 19561, 46704, 89599, 46632, 89052, 48670, 18148, 48488, 18518, 46742, 20575, 46446, 21054, 48335, 19369, 46695, 21227, 48057, 20089, 48200, 19216, 46505, 20397, 46591, 20438, 46204, 21076, 46173, 21305, 46378, 21300, 46363, 21605, 46514, 21602, 46397, 20015, 47834, 471887, 46090, 20736, 46031, 89222, 46395, 89084, 46290, 21180, 46030, 89844, 46071, 21843, 46032, 22123, 45803, 89876, 45947, 20897, 45888, 89381, 45703, 21474, 45623, 90065, 45709, 90174, 45674, 22199, 45586, 22550, 45370, 22063, 45535, 21312, 45525, 21577, 45291, 21905, 45440, 21999, 45242, 22474, 45046, 22831, 45073, 23034, 43917, 23549, 45097, 21742, 43406, 23643, 43164, 24087, 44906, 22615, 43203, 24474, 43098, 24860, 42871, 25181, 43010, 24528, 42976, 23904, 42679, 24334, 42896, 24400, 42807, 24663, 42789, 24962, 42676, 25227, 42652, 25510, 42592, 24840, 42570, 24300, 42493, 24541, 42548, 24671, 42494, 25020, 42452, 25222, 42406, 25486, 42330, 25796, 42274, 93426, 42175, 24687, 42259, 93022, 42224, 93277, 42199, 93476, 42099, 93810, 42083, 25804, 42041, 26102, 41967, 25524, 41996, 93048, 41963, 93293, 41925, 93533, 41818, 25697, 41814, 94065, 41803, 26117, 41681, 94677, 40149, 94452, 41794, 477966, 40075, 26755, 40062, 27039, 40009, 27268, 40000, 27491, 39935, 27762, 39889, 28033, 39850, 28286, 39800, 27699, 39685, 95341, 39737, 27355, 39637, 27645, 39593, 27895, 39516, 28189, 39508, 28418, 39404, 28722, 39371, 28119, 39241, 27646, 39137, 27905, 39101, 28148, 39074, 28457, 38888, 28846, 38728, 30478, 37277, 30861, 37182, 30291, 37046, 29789, 36843, 30203, 35608, 31630, 35271, 32205, 35201, 32463, 35132, 32772, 35017, 33089, 34933, 32543, 34885, 31966, 34835, 32239, 34672, 32578, 33189, 34279, 33166, 34532, 33111, 34774, 33050, 35086, 33014, 34483, 32952, 33959, 32942, 34151, 32824, 34462, 32812, 34698, 32686, 35062, 31233, 36718, 31163, 36978, 30948, 36554, 30866, 104250, 30793, 36257, 30833, 36438, 30827, 36681, 30819, 36887, 30771, 37147, 30810, 37316, 30775, 35661, 33869, 27008264, }; // int len = sizeof(INTERVALS) / sizeof(INTERVALS[0]); UINT32 len = 344; for(UINT32 k=0; k<len; k++) { if(k % 2 == 0) { PWMX_ACTOUT(CH_PWM4, 64 / 4, High_Level, ENABLE); } else { PWMX_ACTOUT(CH_PWM4, 64 / 4, Low_Level, DISABLE); } // PFIC_DisableAllIRQ(); mDelayuS(INTERVALS[k]/60); // PFIC_EnableAllIRQ(); } while (1) { if(g_gotComand == 1) { for(uint32_t i = 0; i < 64; i++) { my_log("%08ld ", g_cmd[i] & 0x1ffffff); } my_log("\n"); g_gotComand = 0; } // while(capFlag == 0); // capFlag = 0; // for(uint32_t i = 0; i < 350; i++) // { // my_log("%08ld ", CapBuf[i] & 0x1ffffff); // 26bit, \ufffd\ufffd\ufffd\u03bb\ufffd\ufffd\u02be \ufffd\u07f5\ufffd\u01bd\ufffd\ufffd\ufffd\u01f5\u0375\ufffd\u01bd // } // my_log("==========================\n"); // my_log("\n"); // mDelaymS(1000); // TMR1_DMACfg(ENABLE, (uint16_t)(uint32_t)&CapBuf[0], (uint16_t)(uint32_t)&CapBuf[500], Mode_Single); // TMR1_ITCfg(ENABLE, TMR1_2_IT_DMA_END); } } /********************************************************************* * @fn TMR1_IRQHandler * * @brief TMR1�жϺ��� * * @return none */ __INTERRUPT __HIGH_CODE void TMR1_IRQHandler(void) // TMR1 ��ʱ�ж� { if(TMR1_GetITFlag(TMR1_2_IT_DMA_END)) { TMR1_ITCfg(DISABLE, TMR1_2_IT_DMA_END); // ʹ�õ���DMA����+�жϣ�ע����ɺ�رմ��ж�ʹ�ܣ������һֱ�ϱ��жϡ� TMR1_ClearITFlag(TMR1_2_IT_DMA_END); // ����жϱ�־ // R16_TMR1_DMA_BEG = (uint16_t)(uint32_t)&CapBuf[0]; capFlag = 1; } }