Применить ШИМ-сигнал к PIN-коду микроконтроллера

Я использую MC9S08DZ60 . Мне дали принципиальную схему, согласно которой я должен запрограммировать микроконтроллер. Я использую CodeWarrior с Processor Expert, который позволяет мне инициализировать необходимые регистры, мне не нужно писать для этого код.

Требование из кода: Обнаружить импульс ШИМ на выводе 0 регистра D. В ответ включить светодиод и подать сигнал ШИМ на выводы 3,4,5,6 регистра А. Согласно даташиту я приравнял значение Значение канала записывается на ожидаемый пин на микроконтроллере. Как подать ШИМ-сигнал на требуемый PIN-код? Я попытался сделать то же самое в следующем коде.

Пожалуйста, обратитесь к данному коду:

unsigned int result;
   unsigned int pwmSignal()
   {
   If(PTDD_PTDD0) // to check for the incoming PWM signal.
   {
  PTDD_PTDD2 = 1;  //light up LED. 
 do // check Channel for 300ms.
 { 
  //my understanding is to latch the values of the channel value registers to the 
  //expected pin.
   result = TPM2C0VH;
   result <<=8;
   result = result + TPM2C0VL;
   result = PTAD_PTAD4;
   result = PTAD_PTAD5;
 } while (TPM2C0_CH0F == 0);
 }
 else PTDD_PTDD2 = 0;
 }

Код компилируется абсолютно нормально. но я не вижу никаких изменений. На данный момент я хочу сказать, что это моя первая попытка сделать это.

Также у меня есть еще один вопрос, как мне использовать, например, PIN 2 регистра D для двух разных операций в одном main.c ?? Пожалуйста, дайте мне знать, если я могу предоставить больше данных обо всем вышеперечисленном. Заранее спасибо!

Может быть, это не причина проблемы, но мое первое впечатление (не будучи знакомым с вашим MCU) заключается в том, что вы можете захотеть изучить использование функции прерывания смены контакта или функции захвата входа таймера для считывания входящего импульса. Кроме того, вам не хватает закрывающей скобки в конце вашего кода.
На самом деле отсутствующая скобка должна стоять между while и else.
Что сказал Джо: если вам нужно обнаружить изменение вывода, используйте вывод IRQ.
@JoeBaker: спасибо, приятель. я буду читать о IRQ (это был мой второй вопрос). но я все еще застрял с первой проблемой, как применить сигнал PWM к определенному PIN-коду?

Ответы (2)

В вашем коде отсутствует скобка между while и else и дополнительная в конце.

Вот, вот так:

unsigned int result;
unsigned int pwmSignal()
{
    If(PTDD_PTDD0) // to check for the incoming PWM signal.
    {
        PTDD_PTDD2 = 1;  //light up LED. 
        do // check Channel for 300ms.
        { 
           //my understanding is to latch the values of the channel value registers to the 
           //expected pin.
           result = TPM2C0VH;
           result <<=8;
           result = result + TPM2C0VL;
           result = PTAD_PTAD4;
           result = PTAD_PTAD5;
        } while (TPM2C0_CH0F == 0)

     } // here, this one is missing.
     else PTDD_PTDD2 = 0;
 }
 // }
 // ^ This one you added at the end isn't necessary.

Это очень помогает, если ваш код имеет правильный отступ. Я очень удивлен, что ваш компилятор не пожаловался на это.

Спасибо стейси! Я потерял скобку, когда редактировал вопрос и код для загрузки сюда. Это мое отсутствие усердия. Тем не менее, я сделал изменение. спасибо за ваш вклад!

Apprently, согласно техническому описанию, PWM может быть настроен только на определенные контакты MCU, т.е. Edge-aligned PWM. И в то же время только некоторые конкретные пины (согласно даташиту) могут быть настроены только на обнаружение ШИМ т.е. Input Capture.

Поскольку этот вопрос больше не вызывает интереса на форуме, я рассмотрю это как ответ.