Netduino home hardware projects downloads community

Jump to content


The Netduino forums have been replaced by new forums at community.wildernesslabs.co. This site has been preserved for archival purposes only and the ability to make new accounts or posts has been turned off.
Photo

ISR in interop

interop

  • Please log in to reply
6 replies to this topic

#1 jiwonoh

jiwonoh

    Advanced Member

  • Members
  • PipPipPip
  • 42 posts

Posted 18 August 2014 - 10:54 PM

Hi, all.

I'm trying to put usart funcion in interop. I almost did it following the guide as below:
http://blogs.msdn.co...ework-v3-0.aspx

I implmented send function and data stream can be transfered in C# application through the class I made. But when I send packet through usart, the board just freeze when it get the stream. I want to figure out what is cause, so I debug through Keil project. But in that code, ISR part cannot be accessed with debugger (I cannot hit break point in that area)

I'm using USART2 in my board. Other functions look like this: Made from "generate stubs..." and tested it works in simple case. I thought ISR called when it get flag, so I just put native source in .cpp.

I wonder if I want to use ISR in interop, is there any special way of?

Jiwon
UINT32 Usart::s_IsAvailable( CLR_RT_HeapBlock* pMngObj, HRESULT &hr )
{
	UINT32 retVal = 0;
	return retVal;
}

void Usart::s_Send( CLR_RT_HeapBlock* pMngObj, UINT32 param0, HRESULT &hr )
{

}

void USART2_IRQHandler(void)
{
	if( USART_GetITStatus(USART2, USART_IT_RXNE) )
	{
		char t = USART2->DR;
		if( (t != 'n') && (count < MAX_STRLEN) )
		{
			receiveBuffer[count] = t;
			count++;
		}
		else
		{
			//Not implemented yet
			count = 0;
		}
	}
}

 



#2 CW2

CW2

    Advanced Member

  • Members
  • PipPipPip
  • 1592 posts
  • LocationCzech Republic

Posted 19 August 2014 - 06:29 AM

You should be able to hit a breakpoint in an ISR handler - if you can't, it can indicate it is never called (do you actually activate/enable it in your code?).

 

What version of Netduino do you have? Are you developing a port for a new microcontroller? There is already USART ISR handler implemented in the firmware - you can use it as a reference for things needed to get it work (e.g. configure pins, enable peripheral clock, activate interrupt, setup USART module, use locks etc.).



#3 jiwonoh

jiwonoh

    Advanced Member

  • Members
  • PipPipPip
  • 42 posts

Posted 20 August 2014 - 12:24 AM

Thanks, CW2

 

You should be able to hit a breakpoint in an ISR handler - if you can't, it can indicate it is never called (do you actually activate/enable it in your code?).

 

Right. I tested it with usart function in porting kit provided in official site. When I remove initialization code, related ISR handler is not accessible(ISR is registered in init part)

 

But my code is confirmed in native project(Keil), now I'm finding the problem.

 

 

What version of Netduino do you have? Are you developing a port for a new microcontroller? There is already USART ISR handler implemented in the firmware - you can use it as a reference for things needed to get it work (e.g. configure pins, enable peripheral clock, activate interrupt, setup USART module, use locks etc.).

 

I'm using my own board, and it has STM32F429. Many functions are based on netduino. I adopted it in a variety of cases and specification, confidential

 

 

 

Default PK use GPIO ISR handler for checking out the stream on usart. I will test and share results.

 

 

Jiwon



#4 CW2

CW2

    Advanced Member

  • Members
  • PipPipPip
  • 1592 posts
  • LocationCzech Republic

Posted 20 August 2014 - 06:32 AM

But my code is confirmed in native project(Keil), now I'm finding the problem.

 

When you use your ISR handler, have you disabled/removed the one in the firmware? There will be a conflict - .NET Micro Framework does not have any support for hardware resource sharing/management, so one must be a little bit careful when adding custom functionality.

 

Also, there are some things you have to add to your native code (which works in Keil) to make it work correctly in .NET Micro Framework - such as properly reserve the pins, use lock macros, etc.



#5 CW2

CW2

    Advanced Member

  • Members
  • PipPipPip
  • 1592 posts
  • LocationCzech Republic

Posted 20 August 2014 - 06:42 AM

Default PK use GPIO ISR handler for checking out the stream on usart. I will test and share results.

 
Well, not really - STM32F4 firmware uses USART interrupt handlers, see STM32_usart_functions.cpp:

CPU_INTC_ActivateInterrupt(g_STM32_UART_Irq[uartNum], STM32_USART_Interrupt0, 0);

GPIO ISR is used in STM32_GPIO_functions.cpp to handle pin interrupts, does not do anything with USART.



#6 jiwonoh

jiwonoh

    Advanced Member

  • Members
  • PipPipPip
  • 42 posts

Posted 20 August 2014 - 06:52 AM

@CW2

 

When you use your ISR handler, have you disabled/removed the one in the firmware? There will be a conflict - .NET Micro Framework does not have any support for hardware resource sharing/management, so one must be a little bit careful when adding custom functionality.

 

 

Surely, I disabled default one in PK source. I changed those with stub file which has no implementation.

CPU_INTC_ActivateInterrupt(g_STM32_UART_Irq[uartNum], STM32_USART_Interrupt0, 0);

 

GPIO ISR is used in STM32_GPIO_functions.cpp to handle pin interrupts, does not do anything with USART.

 

 

You're right. While I track the reference, I missed the right target.

 

 

 

 

Thanks.



#7 jiwonoh

jiwonoh

    Advanced Member

  • Members
  • PipPipPip
  • 42 posts

Posted 22 August 2014 - 02:33 AM

About the issue.

 

 

For using ISR in interop, should follow "PK Convention" not "MDK Convertion" what I used.







0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

home    hardware    projects    downloads    community    where to buy    contact Copyright © 2016 Wilderness Labs Inc.  |  Legal   |   CC BY-SA
This webpage is licensed under a Creative Commons Attribution-ShareAlike License.