C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5721|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& a) c& d0 }6 u( m) Kmain文件:, v. d0 f# N" O9 g0 ]3 u7 [4 ^% Z
interrupt void interrupt4(void)  8 s1 ]* W8 o/ u3 u4 n" E: S
{# p+ B* Z$ |- `
  Uint32 sample;
' g( X# J* Q5 ~) c
2 Q0 ]. Y2 t* w8 D+ R2 F0 E4 N  sample = input_sample(); // read L + R samples from ADC' p. Z2 E3 z, C! a8 S
  output_sample(sample);   // write L + R samples to DAC
4 V' O; E6 W. O. F1 H7 C  return;
; u; P6 l2 S8 }: }}
& [, [& d1 x* H/ U) [
! H. J4 m5 w% U% P: qint main( void )$ x+ q4 I% l' {
{
. x& Y$ J' o4 J4 U% }+ E+ l* E! t2 L' ]9 P5 |) E+ t
    /* Initialize BSL */
0 v! ]* e0 ^& b+ P0 Q    EVMC6747_init( );: e* M7 @$ `* C; r- C6 `
        /* Call evmc6747_intr function */9 p* B0 i/ S- u6 J$ N) V0 M
    aic3106_init( );5 d, E" d" j: N* f# z: c9 d. ]
        while(1);4 k4 x4 a+ ]# X" ~; ]7 \% {
}- m, @, j) L$ e. f/ H% V
9 X$ e% R" z+ ?2 c0 ?
8 x8 U: E" U* ]
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! t0 T' o! T3 V! U  A8 o/* Initialize MCASP1 */
+ W0 V7 _3 I2 R; F- h$ l5 {8 Z6 r+ g    mcasp = &MCASP_MODULE_1;/ ]; ~. ]- R; c/ W( l0 _; \
    mcasp->regs->GBLCTL  = 0;       // Reset
: b6 }6 I/ p/ H/ m- V    mcasp->regs->RGBLCTL = 0;       // Reset RX! H* v) H$ W5 h) w6 {( ~. N! |
    mcasp->regs->XGBLCTL = 0;       // Reset TX
3 s2 A+ Z- A+ F0 |5 P    mcasp->regs->PWRDEMU = 1;       // Free-running- u; I* c  y% x2 P+ Q/ V
   // configure McASP0 receive registers
5 D; ^4 x4 x' O! h, m9 m- F4 \5 k    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used: S" U$ \) W( z% L/ K, ]
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; @9 d$ M6 V5 Y; p% b. T    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! g2 G) ^& w) C% Q# p
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# l1 B& q- o) F, m4 P6 p7 ?8 k
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 g2 i- e8 X2 z    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
7 ?8 ?1 T. P# O9 W3 g% F: j    mcasp->regs->RINTCTL    = 0x00000000; // Not used
# r$ D+ r% U1 U" ?* x0 T! p, F    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 ?4 k" J7 k% {/ J- ~& \' p0 D* S: H( y! G
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
+ a( X6 {: A/ `1 k* L0 D    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 e8 l4 T. k: O1 ]- j# u0 ]
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% p7 p1 e3 R7 G0 s    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ C( Y6 G8 m8 x5 H) h5 g' ~    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' C: D0 g7 C6 T0 t4 q2 l    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1: K5 B8 s( {# d# E
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, X, J% r- W8 C    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 }1 A4 h! j- Z2 S5 D6 U2 U7 B4 f
/ l( `7 q- R% v% y8 T8 Q    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN) Y; y2 ^5 n3 y
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 n0 p, Y8 |& s% B7 }0 k2 h1 E
    mcasp->regs->PFUNC      = 0;          // All MCASPs
; k$ |! _+ _0 N    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; H2 K9 B, ]- e$ s7 e, y. ^- P7 g$ q: L  ?3 d1 M0 D$ ]- M
    mcasp->regs->DITCTL     = 0x00000000; // Not used9 [# J8 O' ?2 _4 h0 C" ?
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
" ?5 c$ f; j" `3 {    mcasp->regs->AMUTE      = 0x00000000; // Not used
, P' P4 l6 z6 m, Z  W8 f! }5 o  Z% H4 f* M7 e+ Y. v
/* Starting sections of the McASP*/2 A# U# G. ^" q" K# z4 f# T, H# _
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 f* T. @1 m' Y' E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
- [6 X/ I/ _* l& F2 h  o, y    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # c# Q7 Q  w8 r; e/ W# M% F7 {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* h" b: o' Y& I, q* b5 E% x/ }8 H# S, g- c6 z' |& B
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - U6 t% t1 V/ Y0 G  T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 A: f! s: b7 C/ [; p    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 G7 V3 q$ G. |% n& h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. f9 Z: S5 ~8 y! h% b- f6 ]5 \+ f# A# Z* Q* D+ f
    mcasp->regs->XSTAT = 0x0000ffff; + j9 E$ y6 d2 H) [3 T! j, ^. F
    mcasp->regs->RSTAT = 0x0000ffff;
* t  {1 ]2 ~/ s- M0 c5 X2 {1 C
' a2 J- |# R( p& L& w  ?  A1 A- G    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- ~- H( p8 p( m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 A, r+ _$ ~( x4 k    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
. T4 U2 ?0 Z+ g) y8 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 g# O: s$ N* q4 ]$ r0 W5 |( A, _
    /* Write a 0, so that no underrun occurs after releasing the state machine */
! r& w* U8 i# ~5 E2 n. [    mcasp->regs->XBUF5 = 0;4 w* j% a  ]8 w2 T
    mcasp->regs->RBUF0 = 0;2 r) d/ \6 X# d8 F8 r
- _+ l9 b* R  b7 `) s% ~! E
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
4 z5 R4 d4 p! t, k) T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ g; g6 r. M! m    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 {. U  @. R2 b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 A2 S7 m& n4 T6 x, [( X* z; Y) z
" X8 Y: [2 e4 a5 O: ~! @3 _
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 \7 J, R/ e4 ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 ?3 \3 y+ |2 J, o    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 a# Y( j0 A8 v1 U: E) J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 V- L, a) @+ O2 o1 U+ n
7 B1 A7 u1 I  F$ K. s# ^: I: S/ m" E    CSR = 0x0000;
( K. t- E$ O+ ~& V  x2 y    INTC_INTMUX1 = 0x3d;
) d' @! z3 G8 M9 j    ISTP = (unsigned int)vectors;' l8 x9 }4 S( J( E2 L2 s
    ICR = 0xFFF0;  ( a- Y0 @/ k1 `
    IER |= 0x12;  3 F$ P6 h5 O& L. q
    CSR |= 0x01;  5 I" p$ H! ^5 |2 t  g
$ ?) V5 t/ B6 o& C, O& F

; |( x! n' i1 k! Z
5 ^1 @7 e' S, M1 H3 Z7 ~还有就是两个输入输出函数:
+ f/ `, A% J6 h- H5 hvoid output_sample(Int32 out_data)
8 Q- C$ T. s0 `9 C4 N{3 i4 x0 M% N+ x5 p3 i  o
  AIC31_data.uint = out_data;  ! j/ v# ?, ~" [; @2 X" z5 A
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
8 ]8 W2 @# c. V3 y" x}- G6 k0 J) {) I8 t  ]; {  G; |

" w6 [1 S) W, x# M  N' XInt32 input_sample(void)
+ S& F# N! m% h! X) _4 \{  * ^4 V0 W  a1 `' S; [
  AIC31_data.uint = MCASP1_RBUF0_32BIT;( [! O  k, [+ |; h
  return (AIC31_data.uint);
6 E/ k' e* ?$ e2 e$ U}
: E( r0 ~( y( W8 V/ D9 m6 b* P# _6 i- ~2 P* p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-4 20:47 , Processed in 0.043478 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表