C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) h3 B2 ~$ A* N" X" E& N3 k5 d0 A
main文件:, _" \2 w+ j9 S3 P$ _
interrupt void interrupt4(void)  ; X. E6 d& U, B/ }" Q) m
{
  E! g/ r0 X+ V: w+ w  Uint32 sample;& X/ @; [0 [' d0 Y6 \

# i$ J: D0 v6 e5 ~5 ~' l  sample = input_sample(); // read L + R samples from ADC& r* ]. J8 }& P1 h4 u# t  C
  output_sample(sample);   // write L + R samples to DAC / t6 W4 r% Y4 R+ ]2 ^
  return;8 x; [; U$ v- S' @( E- u5 F
}; ^$ L- A9 \7 m- E1 f, y

6 P8 V$ s4 l5 {: O, @7 J& b1 Hint main( void )
4 `2 G3 }0 @; ?! X" [{: T& l$ N( A: n1 y1 m# U! E

$ y! Y* S  X0 d6 V: ]    /* Initialize BSL */
  _1 W' I# @, y# f, K6 V    EVMC6747_init( );, v* T  O# d# z: G9 Z0 A" _
        /* Call evmc6747_intr function */
* A% G7 Z0 e* h3 N! o: H: e' m6 E    aic3106_init( );
% `% p& k8 \( v        while(1);. Y  h' c0 n! Q3 n
}
# ~: Z7 s, k7 c" v. [; _1 x% B+ m' F' U/ ~. R
: |$ |4 X+ ^8 J# w; @9 F! a+ F& y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 r5 P1 D7 r' x7 G# `; _; I% `
/* Initialize MCASP1 */
/ G6 F- D  o5 d) Z! D4 _$ w5 o    mcasp = &MCASP_MODULE_1;( a. C) I$ v$ Z8 F" R, K
    mcasp->regs->GBLCTL  = 0;       // Reset; _2 x; n# Z; Q2 _; p$ {& A
    mcasp->regs->RGBLCTL = 0;       // Reset RX
' J. n' I: G0 t1 U5 P& a! X    mcasp->regs->XGBLCTL = 0;       // Reset TX+ F. S* V$ J+ S- T0 w3 D
    mcasp->regs->PWRDEMU = 1;       // Free-running
) Q/ v/ m" [! s   // configure McASP0 receive registers
( f! t3 _# I' Y& z    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
) v: y- G8 i  ]9 R    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 F! d* R3 x2 [( @& r* n4 h# H    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* W6 E) \* d& ^1 r5 Q. P' Q
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! i. i5 G, q. ~1 v2 ]
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)+ ?' l2 i% E6 s6 p
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 u/ W3 {, B' q% t* I2 u0 }
    mcasp->regs->RINTCTL    = 0x00000000; // Not used0 s8 |( Q: C0 }* I+ Q+ S% s$ X
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 `! J6 H0 p' W  m% |
4 S; \5 z" l" j1 `& L- D8 Q# S0 V    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used2 O- M: B3 @6 z* B
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! H+ _2 W4 y; x3 c" E( |
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
* c/ j. K9 j" ~) ]( Y1 i    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, v( S! Q" e; _% A' z1 i: z! _    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK, Y& O( @. Y5 {# N
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
4 G8 {2 K- q( @8 e1 R6 x    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
) R+ P, W' T  B4 n, o    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" P+ l. I4 ]& T0 n

' s4 b7 `  q* H- l3 Q& B# h    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN9 X: T& w# t- a) m
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT# @* a2 n2 a+ ~- ^# J0 q
    mcasp->regs->PFUNC      = 0;          // All MCASPs/ |* P' [# N5 r! r6 ^. h
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' B) l" [$ h. u" {: l: Z" C: Z5 L- ~

; a) n9 U: z" ]  X3 \  K    mcasp->regs->DITCTL     = 0x00000000; // Not used
  @' W# T- t4 A; |' g8 E    mcasp->regs->DLBCTL     = 0x00000000; // Not used( J6 N2 U5 z8 B9 b5 e
    mcasp->regs->AMUTE      = 0x00000000; // Not used
0 g- E: f" L8 A
2 }- l' H- E* i8 T5 U: j8 P/* Starting sections of the McASP*/: b: b" }1 L2 {8 p# G# p
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 g& n, j3 T# p7 p# v$ E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
: f( L, x( R# Z8 ~& ^% t9 ~# d    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; : Q2 Q, F3 V/ d4 y  j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
) o1 ]+ t/ {7 O0 T' B' F  M6 B- }. [, N& N4 A1 _2 i
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 1 a( u  W) ~% t" o4 A4 j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 G& c9 B7 t4 J4 K1 a1 [  C    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 v) W3 i( C3 A* Y% q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 V- B; v" B+ E9 k% Q" ^' `
2 {- n; f# i: E9 e4 q8 P4 K) }# ^
    mcasp->regs->XSTAT = 0x0000ffff; 3 Q: z$ F( f' y" c3 I8 P: L0 ~
    mcasp->regs->RSTAT = 0x0000ffff; $ A0 Y. C$ o- k/ q/ P0 e
; r+ c& G4 l- G( a' {
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;  M9 A5 L! ^' i, ?* _9 c% E* d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
  {5 R2 z/ B6 [5 c6 c+ o; I    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* z9 S, K( L6 v! H' K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 W, L7 f5 s: X5 c  o0 [- ~; ]6 }) ], g" ?, [. O
    /* Write a 0, so that no underrun occurs after releasing the state machine */
- t0 e( N8 [  W6 D4 b6 v- b    mcasp->regs->XBUF5 = 0;
* r- {2 i7 C2 r8 y9 a, a    mcasp->regs->RBUF0 = 0;
0 W$ L8 m0 i6 Z4 F) Z. ^1 ~8 m! @  a
6 u* V; Q2 a, q! L- G& X, d; w    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
. v$ i5 ^9 c& `7 d! a% [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
  M2 I: W( T' k" {" {) A    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 J& a1 K+ E! |. ]3 q1 d5 A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );$ U0 }) e) b" A5 _) T
* b5 f- Y$ N9 @  h, M! u
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 X+ Q, t0 t1 _8 Y, Q0 |/ L5 ]9 r  K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' p" z! M4 z" N2 @& X( M
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. F: [9 D3 s; m5 H( C% g4 q! Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
% U/ c  D+ Z1 P( o9 z) `7 ^) ~4 E; K- {6 X! l$ z0 h# Z& R8 G
    CSR = 0x0000;
' E$ a5 A: M: d  K# m2 Y: m, `    INTC_INTMUX1 = 0x3d;! _+ g3 @8 W8 t# e* m9 O
    ISTP = (unsigned int)vectors;( z  M8 [. [2 B2 F$ W: ^6 |
    ICR = 0xFFF0;  
7 a0 b8 J1 N  b6 @) _& l" t    IER |= 0x12;  / {1 \% q; W  \, h7 O2 r2 u
    CSR |= 0x01;  
* O6 E' Q7 Q0 \" K( u6 k* m. I6 [1 J3 L* r  ?4 ]

( z+ L7 u( e9 }( X* O; u& ^! d, X2 V3 m: Y& w
还有就是两个输入输出函数:
* Y5 {' F/ J, m4 Rvoid output_sample(Int32 out_data)
9 ^' S1 s8 L* u( Q! k% g{
. X9 s/ s) w. Y) d9 Z7 B) b  AIC31_data.uint = out_data;  
4 D. R% f: Y6 @6 w2 c  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 t6 `' g+ j; ^/ d7 j$ d}
. h: ^/ C% E: d. {0 s
4 s6 Y# A$ s) D6 a- zInt32 input_sample(void)2 |/ O5 D; @) |1 r: d2 M
{  
) \8 t( p* l/ k: B8 E8 b8 E  AIC31_data.uint = MCASP1_RBUF0_32BIT;* ?2 B) _& o: U6 E- m' A
  return (AIC31_data.uint);! A1 T1 O: F; O; z% ~; U9 k" R1 z
}
: X2 u0 B0 _- a1 s- T1 `- K
) H8 x# f. r% y8 y+ u
分享到:  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, 2026-1-21 18:09 , Processed in 0.040434 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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