ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
7 ноября
852574 Топик полностью
sladkoejka (03.07.2018 11:45 - 11:51, просмотров: 371) ответил Bill на Вообще-то, примеры примеры были сделаны для вашего контроллера.
Во первых ваш пример ничего не делает, поэтому понять работает он или нет на железе нет возможности. Во вторых (читать внутри)... Во вторых USB прерывание обрабатывается не так. По вектору прерывания USB нужно поставить LJMP на адрес новой таблицы прерываний. В новой таблице прерываний будут вектора обработки прерываний от USB. IAR это по сути из си не поддерживает. В третьих вот простейший код мигания светодиодом на на си (два светодиода на младших битах IOA): #include <ioCY7C68013A.h> #include <intrinsics.h> void delay(unsigned long n) { while( n-- > 0 ) __no_operation(); } void main( void ) { SOEA = 0x03; // Enable Port A Pins: 0, 1 (LED0 & LED1) IOA = 0x03; // LED0 & LED1 off for (;;) { IOA = 0x02; // LED0 on delay(10000); IOA = 0x03; // LED0 off delay(10000); } } На реальном железе этот код включает LED0 и навсегда уходит в анабиоз. Если добавить в проект ассемблерный файл следующего содержания fix.s51: COMMON INTVEC:CODE:ROOT(0) ORG 0x006A SJMP $ END то код на реальном железе начинает работать и мигает светодиодом примерно с частотой 2 Гц. Обращаю внимание что в асм модуле стоит SJMP на себя, т.е. вечный цикл. В случае необработанного прерывания код навсегда зависнет. Интересно узнать Ваше мнение в чём причина такого поведения? :)