Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 13.05.2019, 13:48   #26
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 42
Сообщений: 4,338
Вес репутации: 2476/112
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от besogon Посмотреть сообщение
maagalex
я вышел на тело функции, эти дефайны и в конечном счете адрес того регистра в памяти - в данном случае Вам нужен datasheet. в нем должна быть раскладка памяти и описание работы модуля.
В даташите только официальные методы работы через API

Period (8 or 16-bit based on Resolution)
The period register contains the period value set by the user through the PWM_WritePeriod() function call and defined by the Period parameter at initialization. The PWM_ReadPeriod() function may be used to find the current value of this register. The period register has no effect on the PWM until a terminal count is reached, at which time the period counter is reloaded with this value.
maagalex вне форума   Ответить с цитированием
Старый 13.05.2019, 14:07   #27
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 42
Сообщений: 4,338
Вес репутации: 2476/112
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от bzx Посмотреть сообщение
Следует правильно объявить массив указателей на функцию
Попробовал несколькими способами, тот вариант что с ворнингами откомпилился нормально но при работе ничего не выводит в ШИМ
командой
(*pwm[ADR]) ( UART_RXDATA_REG );
Миниатюры
Kahu_Product_Page_iPhone_TabA.png  
maagalex вне форума   Ответить с цитированием
Старый 13.05.2019, 14:35   #28
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,083
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

maagalex
да. адское говно под видом документа на чип.
я посмотрел - судя по всему у этой компании так принято. надеюсь я ошибаюсь.
и официальное API точно также адское говно.

у Вас есть возможность провести обратную разработку того, что делает функция заполнения? как и какие регистры заполняет?

***
указатель на функцию это ее имя - Вы неправильно сформировали массив указателей на функции.
уберите ее вызов.
besogon вне форума   Ответить с цитированием
Старый 13.05.2019, 14:41   #29
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,083
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

пример списка указателей на функции
Код:
/* list of system calls */
void (*const syscall_list[SYSCALL_COUNT])() = {
					       [S_BUG] = sys_bug,
					       [S_SLEEP] = sys_thread_sleep,
					       [S_TSELF] = sys_thread_self,
					       [S_TATTR_INIT] = sys_tattr_init,
					       [S_TCREATE] = sys_thread_create,
					       [S_TYIELD] = sys_thread_yield,
					       [S_TEXIT] = sys_thread_exit,
					       [S_MINIT] = sys_mutex_init,
					       [S_MLOCK] = sys_mutex_lock,
					       [S_MTLOCK] = sys_mutex_trylock,
					       [S_MULOCK] = sys_mutex_unlock,
					       [S_CINIT] = sys_cond_init,
					       [S_CWAIT] = sys_cond_wait,
					       [S_CTWAIT] = sys_cond_timedwait,
					       [S_CSIGNAL] = sys_cond_signal,
					       [S_CBCAST] = sys_cond_broadcast,
					       [S_CWAI] = sys_condint_wait,
					       [S_CTWAI] = sys_condint_timedwait,

					       [S_PRIGET] = sys_getpri,
					       [S_PRISET] = sys_setpri,

					       [S_INTPRI] = sys_intpri,

					       [S_SPEEDSTEP] = sys_speedstep,
					       [S_CISIGNAL] = sys_condint_signal, 

};
besogon вне форума   Ответить с цитированием
Старый 13.05.2019, 15:52   #30
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 42
Сообщений: 4,338
Вес репутации: 2476/112
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от besogon Посмотреть сообщение
maagalex
да. адское говно под видом документа на чип.
я посмотрел - судя по всему у этой компании так принято. надеюсь я ошибаюсь.
и официальное API точно также адское говно.

у Вас есть возможность провести обратную разработку того, что делает функция заполнения? как и какие регистры заполняет?

***
указатель на функцию это ее имя - Вы неправильно сформировали массив указателей на функции.
уберите ее вызов.
Это не на чип а на программно-аппаратный модуль документация,
такие модули пишут в том числе и сторонние разработчики, описывают их в даташите и добавляют в среду разработки..
Я выяснил что адрес регистра 6528
#define CYREG_B1_UDB08_D0 0x00006528u
Запустил дебаггер, благо он сейчас идет уже в программаторе, и посмотрел что меняется в этом регистре при помещении в первый ШИМ 128 и во второй ШИМ 1
Миниатюры
2.png  
maagalex вне форума   Ответить с цитированием
Старый 13.05.2019, 16:49   #31
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,083
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

maagalex
у Вас есть блок PWM и в нем 18 регистров скважности или что?
тогда у Вас и получается для Ваших 18 нужно сделать массив
Код:
...
reg8 * restrict const pwm1_compare_list[CHANNEL_COUNT] = {
	[0] = PWM_1_COMPARE1_LSB_PTR,
	[1] = PWM_1_COMPARE2_LSB_PTR,	
...
};
...
/*...*/
extern reg8 * restrict const pwm1_compare_list[CHANNEL_NUM];
/*...*/
__attribute__((always_inline))
static inline void pwm1_compare_set(const u8 channel, const u8 value){
	if(likely(CHANNEL_COUNT > channel)){
		CY_SET_REG8(pwm1_compare_list[channel], value);
	}
}
besogon вне форума   Ответить с цитированием
Старый 13.05.2019, 16:53   #32
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 42
Сообщений: 4,338
Вес репутации: 2476/112
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Подскажите по указателям

Уже получилось так задать значения
PHP код:
if(ADR==1)      CY_SET_REG80x00006528u,UART_RXDATA_REG);//  PWM_1_WriteCompare2(UART_RXDATA_REG); 
if(ADR==2)      CY_SET_REG80x00006538u,UART_RXDATA_REG);//  PWM_1_WriteCompare2(UART_RXDATA_REG); 
if(ADR==3)      CY_SET_REG80x00006524u,UART_RXDATA_REG);//  PWM_2_WriteCompare1(UART_RXDATA_REG); 
maagalex вне форума   Ответить с цитированием
Старый 13.05.2019, 17:18   #33
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,083
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

Уже получилось так задать значения - у каждого pwm по 2 compare?
тогда наверное список такой.
Код:
reg8 * restrict const pwm_compare_list[CHANNEL_COUNT] = {
	[0] = PWM_1_COMPARE1_LSB_PTR,
	[1] = PWM_1_COMPARE2_LSB_PTR,
	[2] = PWM_2_COMPARE1_LSB_PTR,
	[3] = PWM_2_COMPARE2_LSB_PTR,
	[4] = PWM_3_COMPARE1_LSB_PTR,
	[5] = PWM_3_COMPARE2_LSB_PTR,
...
};
besogon вне форума   Ответить с цитированием
Старый 14.05.2019, 00:22   #34
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 46
Сообщений: 1,591
Вес репутации: 2280/78
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от besogon Посмотреть сообщение
gcc компилятор собирает нормальный код.

Это нормальный код, если switch перебирает последовательно все case?
Не вычисляемый goto, не таблица, а просто тупой перебор?!
DimaS вне форума   Ответить с цитированием
Старый 14.05.2019, 09:11   #35
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,083
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

DimaS
gcc в зависимости от условий разворачивает switch-case в то или иное.
даже в арифметику. можно попросить предоставить disasm, чтобы понять, что там за трудности.
в случае малого числа условий перебор быстрее.
besogon вне форума   Ответить с цитированием
Старый 14.05.2019, 11:05   #36
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 46
Сообщений: 1,591
Вес репутации: 2280/78
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

Если перебор - нафиг сфитч нужен, можно и цепочкой ифов.


Лично я для АРМов Кейлом пользуюсь, а GCC - не люблю я все фришное/опенсорсное, или, не дай бог конечно, еше и ГНУтое - от этого всего пингвынами воняет, как говорит один мой товаришь
DimaS вне форума   Ответить с цитированием
Старый 14.05.2019, 12:14   #37
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,083
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

DimaS
то что Вы не любите, что не любит Ваш друг это конкретно Ваш опыт.

то с чем работает сейчас maagalex - это gcc. и это его реальный проект - то, почему с его слов у него разворачивает в цепочку и происходит ли это вопрос открытый.

как говорит один мой товаришь - это его никому не интересные проблемы.
besogon вне форума   Ответить с цитированием
Старый 14.05.2019, 13:52   #38
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 42
Сообщений: 4,338
Вес репутации: 2476/112
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от besogon Посмотреть сообщение
Уже получилось так задать значения - у каждого pwm по 2 compare?
тогда наверное список такой.
Код:
reg8 * restrict const pwm_compare_list[CHANNEL_COUNT] = {
	[0] = PWM_1_COMPARE1_LSB_PTR,
	[1] = PWM_1_COMPARE2_LSB_PTR,
	[2] = PWM_2_COMPARE1_LSB_PTR,
	[3] = PWM_2_COMPARE2_LSB_PTR,
	[4] = PWM_3_COMPARE1_LSB_PTR,
	[5] = PWM_3_COMPARE2_LSB_PTR,
...
};
Интересно что для первого ШИМ канала это
PHP код:
 CY_SET_REG8PWM_3_COMPARE1_LSB_PTR,UART_RXDATA_REG); 
работает..
Для второго же кнала ни это
PHP код:
     CY_SET_REG8PWM_3_COMPARE1_LSB,UART_RXDATA_REG); 
и ни это
PHP код:
CY_SET_REG8PWM_3_COMPARE2_LSB,UART_RXDATA_REG 
,
и не это
PHP код:
CY_SET_REG8PWM_3_COMPARE2_LSB_PTR,UART_RXDATA_REG); 
не работает..ничего не меняет на выходах..

Абсолютные адреса подобрать можно, и надеяться что после перекомпиляции они не убегут)
maagalex вне форума   Ответить с цитированием
Старый 14.05.2019, 14:55   #39
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,083
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

maagalex
покажите то, как Вы пытаетесь применять то, что не работает.
besogon вне форума   Ответить с цитированием
Старый 14.05.2019, 17:32   #40
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 42
Сообщений: 4,338
Вес репутации: 2476/112
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от besogon Посмотреть сообщение
maagalex
покажите то, как Вы пытаетесь применять то, что не работает.
Эмпирически подобрал все каналы и все работает
PHP код:
    //if(ADR==1)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB11_D0,UART_RXDATA_REG);
    //if(ADR==2)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB11_D1,UART_RXDATA_REG);
    //if(ADR==3)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB12_D0,UART_RXDATA_REG);
    //if(ADR==4)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB12_D1,UART_RXDATA_REG);
    //if(ADR==5)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB13_D0,UART_RXDATA_REG);
    //if(ADR==6)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB13_D1,UART_RXDATA_REG);
    //if(ADR==7)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB04_D0,UART_RXDATA_REG);
    //if(ADR==8)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB04_D1,UART_RXDATA_REG);
    //if(ADR==9)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB02_D0,UART_RXDATA_REG);
    //if(ADR==10)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB02_D1,UART_RXDATA_REG);
    //if(ADR==11)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB06_D0,UART_RXDATA_REG);
    //if(ADR==12)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB06_D1,UART_RXDATA_REG);
    //if(ADR==13)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB10_D0,UART_RXDATA_REG);
    //if(ADR==14)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB10_D1,UART_RXDATA_REG);
    //if(ADR==15)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B1_UDB07_D0,UART_RXDATA_REG);
    //if(ADR==16)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B1_UDB07_D1,UART_RXDATA_REG);
    //if(ADR==17)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB07_D0,UART_RXDATA_REG);
    //if(ADR==18)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB07_D1,UART_RXDATA_REG);
    //if(ADR==19)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB00_D0,UART_RXDATA_REG);
    //if(ADR==20)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB00_D1,UART_RXDATA_REG);
    //if(ADR==21)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB05_D0,UART_RXDATA_REG);
    //if(ADR==22)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB05_D1,UART_RXDATA_REG);
    //if(ADR==23)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B1_UDB06_D0,UART_RXDATA_REG);
    //if(ADR==24)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B1_UDB06_D1,UART_RXDATA_REG);
    //if(ADR==25)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB03_D0,UART_RXDATA_REG);
    //if(ADR==26)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB03_D1,UART_RXDATA_REG);
    //if(ADR==27)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB01_D0,UART_RXDATA_REG);
    //if(ADR==28)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB01_D1,UART_RXDATA_REG);
    //if(ADR==29)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB15_D0,UART_RXDATA_REG);
    //if(ADR==30)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB15_D1,UART_RXDATA_REG);
    //if(ADR==31)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB14_D0,UART_RXDATA_REG);
    //if(ADR==32)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB14_D1,UART_RXDATA_REG);
    //if(ADR==33)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB08_D0,UART_RXDATA_REG);
    //if(ADR==34)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B0_UDB08_D1,UART_RXDATA_REG);
    //if(ADR==35)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B1_UDB08_D0,UART_RXDATA_REG);
    //if(ADR==36)        CY_SET_REG8( CYDEV_UWRK_UWRK8_B1_UDB08_D1,UART_RXDATA_REG); 
Но при изменении конфигурации железа кналы меняются местами..
Нашел такую строку и проверил-работает
PHP код:
if(ADR==15)        CY_SET_REG8PWM_8_PWMUDB_sP8_pwmdp_u0__D0_REG,UART_RXDATA_REG); 
Теперь буду все на такой манер переписывать-тут уже привязка к текущей конфигурации, ну а потом уже массив констант и все эти строки туда и все..)
maagalex вне форума   Ответить с цитированием
Старый 16.05.2019, 16:49   #41
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 42
Сообщений: 4,338
Вес репутации: 2476/112
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Подскажите по указателям

Забавно но какая то ерунда)
Вроде все нашел и по отдельности любой канал ШИМ выставляется,
PHP код:
const unsigned int PWMA[37]=
{
    
PWM_18_PWMUDB_sP8_pwmdp_u0__D1_REG ,//PWMA[0] NOT ACTUALLY, DUMMY
    
PWM_1_PWMUDB_sP8_pwmdp_u0__D0_REG 
    
PWM_1_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_2_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_2_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_3_PWMUDB_sP8_pwmdp_u0__D0_REG ,
     
PWM_3_PWMUDB_sP8_pwmdp_u0__D1_REG ,
     
PWM_4_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_4_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_5_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_5_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_6_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_6_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_7_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_7_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_8_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_8_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_9_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_9_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_10_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_10_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_11_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_11_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_12_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_12_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_13_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_13_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_14_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_14_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_15_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_15_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_16_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_16_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_17_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_17_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_18_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_18_PWMUDB_sP8_pwmdp_u0__D1_REG
}; 
Более того, так я вывожу по сигналу DMX первые три ШИМ канала нормально
PHP код:
CY_ISR(UAR_INT)
{
    
unsigned char readStatus,readData;
    
readStatus UART_ReadRxStatus();
    if(
readStatus UART_RX_STS_STOP_ERROR)
    {
        
ADR=0;
        return;
    }
     if(
ADR==1CY_SET_REG8PWMA[1],UART_RXDATA_REG);
    if(
ADR==2CY_SET_REG8PWMA[2],UART_RXDATA_REG);
    if(
ADR==3CY_SET_REG8PWMA[3],UART_RXDATA_REG);
    
ADR++;

..
А когда ставлю вообщем то тоже самое но одной строкой
PHP код:
CY_SET_REG8PWMA[ADR],UART_RXDATA_REG); 
начинаются чудеса пропуска каналов, например третий выводит значения дла второго, восьмой для третьего и тд..Как будто времени не хватает на вывод и пропускаются несколько байт из пакета, но почему они тогда не пропускаются в примере выше, там и дольше выполняется действие с тремя сравнениями..

ПС
Такой вариант
PHP код:
if(ADR<4CY_SET_REG8PWMA[ADR],UART_RXDATA_REG); 
вывводит три канала ШИМ 2,3,4 в каналы 1,2,3
а такой
PHP код:
 if(ADR<7CY_SET_REG8PWMA[ADR],UART_RXDATA_REG); 
Выводит 5,6,7 в 1,2,3 а каналы 1,2,3 выводит в 4,5,6

Последний раз редактировалось maagalex; 16.05.2019 в 17:00.
maagalex вне форума   Ответить с цитированием
Старый 16.05.2019, 18:30   #42
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,083
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

maagalex
Код:
CY_ISR(UAR_INT) 
{ 
    unsigned char readStatus,readData; 
    readStatus = UART_ReadRxStatus(); 
    if(readStatus & UART_RX_STS_STOP_ERROR) 
    { 
        ADR=0; 
        return; 
    } 
     if(ADR==1) CY_SET_REG8( PWMA[1],UART_RXDATA_REG); 
    if(ADR==2) CY_SET_REG8( PWMA[2],UART_RXDATA_REG); 
    if(ADR==3) CY_SET_REG8( PWMA[3],UART_RXDATA_REG); 
    ADR++; 
}
то о чем Вы говорите довольно странно - что такое ADR?
почему readData не используется?
можете немного переписать код, чтобы облегчить мое восприятие?
можете сделать для отладки массив, куда заносить то, что Вы приняли по UART?
Код:
CY_ISR(UAR_INT)
{
	const unsigned char status = UART_ReadRxStatus();
	if(0 < (status & UART_RX_STS_STOP_ERROR)){
		ADR = 0;
		return;
	}
	const unsigned char data = UART_RXDATA_REG;
	const unsigned int selpwm = PWMA[ADR];
	++ADR;
	
	/* fill the PWM */
	CY_SET_REG8(selpwm, data);
}
besogon вне форума   Ответить с цитированием
Старый 16.05.2019, 18:43   #43
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,083
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

И еще.
добавьте для отладки BUG когда ADR не соответствует Вашему ожидаемому числу.

я неправильно пост выше написал. отупел совсем.
конечно же перед индексацией массива нужно проверить входные данные с UART, иначе Вы испортите память.
Код:
if((0 == data) || (36 < data)){
	ADR = 0;
	return;
}
besogon вне форума   Ответить с цитированием
Старый 16.05.2019, 22:56   #44
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,083
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

maagalex
как у Вас устроен канальный уровень?
будет здорово, если Вы опишете протокол Вашего взаимодействия с вот этим вот всем. канальный уровень.

если Вы просто подряд передаете 18 значений для PWM по UART это конечно не здорово.

я не смог вникнуть в анализ ошибок у Вас в модуле UART. наверняка там не одна-единственная ошибка и вполне может быть, что все ошибки UART заведены на тот же вектор, что у Вас описан.

я бы сделал полную обработку всех возможных ошибок.
besogon вне форума   Ответить с цитированием
Старый 16.05.2019, 23:01   #45
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 42
Сообщений: 4,338
Вес репутации: 2476/112
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от besogon Посмотреть сообщение
maagalex

то о чем Вы говорите довольно странно - что такое ADR?
почему readData не используется?
readData это переменная которой при вызове функции чтения УАРТ присваивается значение UART_RXDATA_REG, так я прямо то значение и беру чтобы не ходить далеко..
ADR это счетчик принятых байтов, принимаются байты один за другим ,вызывая это вот прерывание в котором и сидит описанная программа..
Байты корректные, тут вопросов нет, раньше я выводил их на ШИМ в основном теле программы и все работало как надо, проблема только со старшими адресами-не успевал их вывести до получения следующего пакета..
Проблема скорее всего не в скорости, ибо все хоть и работает криво-но стабильно, никаких мерцаний, тут что то с индексами..
Байты приходят сначала с ошибкой (стоп байт), следующий со значением 0 (старт байт), и дальше первый ШИМ,второй и тд..
Но и индексацию я проверял зажигая все ШИМ через ту же строку с индексом в цикле..странно..
Нулевой байт я кидаю в регистр который первый в таблице (DUMMY), просто чтобы не добавлять условие лишнее..это время..

..да, вместо тега код лучше php ..красивее выходит
maagalex вне форума   Ответить с цитированием
Старый 17.05.2019, 10:35   #46
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,083
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

maagalex
у меня из-за профессиональной деформации появилось нездоровое желание дожать то, в чего влез.
Расскажите что в итоге у Вас получилось?
besogon вне форума   Ответить с цитированием
Старый 20.05.2019, 14:24   #47
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 42
Сообщений: 4,338
Вес репутации: 2476/112
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от besogon Посмотреть сообщение
maagalex
у меня из-за профессиональной деформации появилось нездоровое желание дожать то, в чего влез.
Расскажите что в итоге у Вас получилось?
Ну как бы это нормально помогать..при условии что все это делают-все в выигрыше)
В итоге я сначала запутался и отчаялся ибо
строки

PHP код:
    if(UART_RXSTATUS_REG 8)
    {
        
ADRR=0;
        return;
    }

    if(
ADRR<41)
    {        
        if(
ADRR<2)        CY_SET_REG8PWMA[ADRR],temp); 
        if(
ADRR==2)        CY_SET_REG8 (PWMA[ADRR],temp);
        if(
ADRR==3)        CY_SET_REG8(PWMA[ADRR],temp); 
    } 
вполне работали, а так
PHP код:
    if(UART_RXSTATUS_REG 8)
    {
        
ADRR=0;
        return;
    }

    if(
ADRR<41)
    {        
        if(
ADRR<4)        CY_SET_REG8PWMA[ADRR],temp); 
    } 
уже не работало, выводило первые два канала подряд, а третий уже четвертым (пропустив один)

И уже было думал идти более сложным путем поиска временного окна между прерываниями, и тут методом тыка оно все заработало корректно..все 36 каналов..
Воткнул от балды регистры 5000, надеюсь они не важны для чего то, и их изменение не помешает работе
PHP код:
const unsigned int PWMA[40]=
{
    
5000 ,//PWMA[0] NOT ACTUALLY, DUMMY
    
5000 ,//PWMA[0] NOT ACTUALLY, DUMMY
    
5000 ,//PWMA[0] NOT ACTUALLY, DUMMY
    
5000 ,//PWMA[0] NOT ACTUALLY, DUMMY
    
PWM_1_PWMUDB_sP8_pwmdp_u0__D0_REG 
    
PWM_1_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_2_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_2_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_3_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_3_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_4_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_4_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_5_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_5_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_6_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_6_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_7_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_7_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_8_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_8_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_9_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_9_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_10_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_10_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_11_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_11_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_12_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_12_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_13_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_13_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_14_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_14_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_15_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_15_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_16_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_16_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_17_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_17_PWMUDB_sP8_pwmdp_u0__D1_REG ,
    
PWM_18_PWMUDB_sP8_pwmdp_u0__D0_REG ,
    
PWM_18_PWMUDB_sP8_pwmdp_u0__D1_REG
}; 
PHP код:
CY_ISR(UAR_INT)
{
    if(
UART_RXSTATUS_REG 8)
    {
        
ADRR=0;
        return;
    }
    if(
ADRR<41)
    {

        
CY_SET_REG8( (PWMA[ADRR]),UART_RXDATA_REG);
        
ADRR++;                      
    }
 } 

Последний раз редактировалось maagalex; 20.05.2019 в 14:30.
maagalex вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
16f877 подскажите по прерываниям alx71 Продукция MICROCHIP 12 19.09.2011 16:39
Подскажите, пожалуйста, по Configuration Bits LeoN Продукция MICROCHIP 4 06.05.2011 10:04
Подскажите по 18F252 AlexKid Продукция MICROCHIP 7 22.02.2011 12:25
Подскажите по ИК RC-5 плиз... Marat Общетехнические вопросы 2 02.10.2009 17:54
Подскажите по настройке ШИМ-а модуля CCP AleksBak Продукция MICROCHIP 5 18.04.2008 14:25


Часовой пояс GMT +3, время: 11:17.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot