The Java contraption which some people claim to be an IDE in the "arduino" world is not more worth than @#$%^&*.
The AVR microcontrollers behind it are however as capable as any other microcontroller family. No matter which uC family you choose, they will all have UsARTS, SPI, I2C, Timers, Interrupts, watchdogs, etc.
One of the biggest advantages that the AVR's have over a lot of other uC families is full support from the high quality GCC compiler.The ARM processor core is also supported by GCC, but these are often more difficult to set up. "Just" GCC support is not enoug, you also need a linker script, startup code and the right way to glue this together with your own code.
As you say you have already done some stuff with arduino, I assume you have the hardware for it. "arduino nano" boards from Ebay / Ali / China / etc can be grabbed for the price of the postage stamp. Just put them in a Breadboard, apply power, and go from there.
My advice is to start with abandoning the arduino Java contraption (called ide), but still use the arduino framework for a while.
"Atmel Studio" is a capable IDE, based on M$ Visual studio and it can directly import arduino projects. You can also use Platformio to set up arduino projects.
Once you have an arduino project in Atmel Studio or in Atom (Default IDE for Platformio), you can see the whole code, and follow it through the "arduino" libraries and see what is actually happening behind the scenes. The arduino framework is divided over around 20 different source code files, and as many header files.
Assembly is a good tool for learning computer architecture, but not productive enough for almost any real work. C and C++ have become the default languages for small embedded microcontrollers. Assembly is still being used in some niche areas such as:
- Task switching in RTOS systems.
- Very time critical code (Bit banging low-speed USB on an AVR, search: "obdev").
- Intermediate step for the C compiler. (No compiler can be written without asm knowledge).
- Schools for Learning the basics of uC architecture.
Apart from these (and a few other) niches assembly has no real use anymore.
C and C++ are very much standarized langugages. I can take a library to control some external hardware in C / C++ from github written for any uC architecture and port it to AVR, even if the library was originally written for another uC architecture. You have to change how the uC's internal peripherals are handled, but apart from that the code is much the same. In assembly you can forget that. The whole thing has to be rewritten from scratch.
GCC can output listing files, which are human readable and they have both the original C / C++ source code and the by the compiler generated ASM instruction. This can be a valuable tool for understanding how asm is generated from C and the results of different ways of code writing and compiler optimastion settings. Reading asm is a lot easier than writing asm, especially if you already know what it does because the corresponding line of C code is above it.
https://www.avrfreaks.net/ is a very active and great forum for anything related to AVR's.
If you want to go this way, an interesting excersise is to examine why "digitalWrite()" is so horribly slow, and then replace it with some direct register manipulation where applicable.
"digitalWrite()" is acceptable for turning a relay on/of, but not for doing bitbanging of some serial protocol, or toggling the strobe signal of a TFT lcd.
Anyone starting with microcontrollers should buy a logic analyser together with their first uC board. Search Ali / Ebay / China / Etc, for "24m 8ch" and use that Salaea clone box with the excellent Sigrok / Pulseview combination.
https://sigrok.org/wiki/Supported_hardwareOther good resources are reading the dataseets of the uC's you are intested in (they are all on the 'net) and books about general programming in C or C++. I love these languages, but they can be abused in horrible ways. Writing code in a clear and comprehensible way is 80% of a good program. This can also easily be done on a PC. I often write and debug C functions on a PC before I recompile them for a uC. Stuff like CRC algorithms, button debounce code, Menu's string manipulation and lots of other stuff is easier on a PC than on a uC.
Have Fun.