Examples of an I/O interface
I would use the term I/O interface to refer to the set of CPU instructions that one uses to read and write data from or to an I/O device.  There are generally two parts to this.

One is the interrupt mechanism, by which I/O devices can communicate asynchronous information to the CPU.  Generally there is a pin, or several pins, on the CPU chip package that can be used to trigger an interrupt.  Triggering an external interrupt on most CPU architectures will cause the processor to save some (or all) of its register state and jump to a predetermined location to run the interrupt service routine.  (On some architectures there is a way of triggering different interrupt routines for different purposes, while on others there is a single external interrupt routine and there needs to be additional communication done in the interrupt service routine to figure out which device needed service.)

The second part is the way that data gets communicated back and forth between the CPU and the I/O device.  This is generally done one of two different ways: memory mapped or "port mapped".  In memory mapped I/O the registers on the I/O device are mapped to particular locations in the CPU's memory space, and the CPU uses normal load and store instructions to read and write those registers.  In port mapped I/O the registers on the I/O device are mapped to particular locations in something called "port space."  The instructions you use to access the I/O device's registers are often called something like in and out, but they are pretty similar to load and store instructions.  There are other possibilities that get more complicated, but I've probably already given you more detail than you want.

For every specific device there is then some set of device registers that need to be read and/or written with specific values in some specific order. The protocols for what you need to read/write in which registers can get exceedingly complex.

To make this clearer let me give you an example.  Let's take the PC keyboard (from the old days before we had USB).  Here is the first thing that came up when I googled: http://www.oopweb.com/Assembly/Documents/ArtOfAssembly/Volume/Chapter_20/CH20-2.html#HEADING2-1.  The keyboard controller has two 8-bit registers mapped to port addresses 60h and 64h (hexadecmial).  You read these registers using inb and outb instructions which moves data between the ports and the CPU registers.

The keyboard will additionally cause an interrupt to interrupt number 9 (out of 255) every time a key is pressed or released.  So the interrupt service routine associated with interrupt 9 reads port 64h and looks at bit 1 to see if there is a data byte ready. If there is it reads the byte out of port 60h and copies it into some memory buffer for software to read later.  (The reason you do the test is that several different hardware devices may be sharing the interrupt.)