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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 _& {  |, N4 x6 D
main文件:
9 c5 a+ E) u2 o& d1 s- Uinterrupt void interrupt4(void)  5 r- O5 F+ w- L% Y+ Z
{4 X$ `$ m0 K9 ^
  Uint32 sample;
. q- d) a- a5 r# a/ e& U
1 J3 o* t! t" \2 V  sample = input_sample(); // read L + R samples from ADC" V+ D4 R0 q* b. @2 ]4 ^
  output_sample(sample);   // write L + R samples to DAC 9 [+ h  n! h" L# ?9 P% r
  return;
; Z# t! \8 T9 f& C/ _9 Q}( E+ }( q- g0 k

: Q8 E$ \& a- e5 q; }0 m" oint main( void )
. j2 ~$ Q* D3 B) T1 l{! R7 X- n3 J1 O1 m# ^' K, _# e
/ ?' e3 |0 q. _9 p' ]
    /* Initialize BSL */1 q0 ^0 J5 u# k$ r+ P! A
    EVMC6747_init( );5 D' n3 ~5 `) w& B5 Y( D; V6 W
        /* Call evmc6747_intr function */  T; C1 j; }7 o  V; `
    aic3106_init( );$ C0 |- v- T7 K3 E" o
        while(1);
' @" s+ A6 q( ?) X- o3 D6 F}
- ~1 p( t0 p/ [/ K, ]/ \
8 A4 N7 j* a7 W( W8 K$ c8 ]: X6 `+ ^2 s. }2 F3 s
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, _+ R) ?6 u+ c0 C# a% L
/* Initialize MCASP1 */0 \5 ^1 W- e: i0 [8 N: c% H
    mcasp = &MCASP_MODULE_1;; I" ^5 {, }- D8 p( f+ B
    mcasp->regs->GBLCTL  = 0;       // Reset- ~$ u7 f4 W0 a7 Y+ s  t1 n
    mcasp->regs->RGBLCTL = 0;       // Reset RX
$ [9 a' X  Z" y6 c0 K    mcasp->regs->XGBLCTL = 0;       // Reset TX3 U4 \6 J# U+ l2 Y
    mcasp->regs->PWRDEMU = 1;       // Free-running. |& P3 p: m! Y
   // configure McASP0 receive registers
% j& l( Q& q3 F5 E; G    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
* T: c4 ?/ t# Z# Y- x; h    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' S3 ^" g( A4 G6 m4 p9 I2 D2 f9 C    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
  g9 T- s& }" ]    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 y% B& ^- g* N% S6 ?! g
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)8 Y1 b  g  [9 l
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
! Q9 y+ z& Q: R    mcasp->regs->RINTCTL    = 0x00000000; // Not used9 J( s3 A4 C0 n
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ x& y' M5 u. {. I
- P, Q1 ?3 K2 R    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
3 t- ~+ R8 m: E  L4 X    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 v6 s$ F! Y. F2 c' e5 p5 Q    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 e% Q) |6 b8 o0 G+ g    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- G* S3 O5 \4 d
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* W1 ^7 @# u* P& }& s# q/ s    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1% w' s+ `4 u9 W; J3 C) A
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
6 F0 M7 [& a6 x* D4 `- E    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 q6 A7 k5 _+ h! Y
% G# J7 Z. A4 a; Y2 r8 M& J; c/ l    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ f( {6 _4 G* b5 S( y7 r! o' y    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
- o8 }: q+ e: [8 ?# u    mcasp->regs->PFUNC      = 0;          // All MCASPs3 l5 E2 a  m0 W$ E5 E8 U  t
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 L9 Y  t8 f; b0 @# _1 F
4 _2 u( ]" I/ O: A' R    mcasp->regs->DITCTL     = 0x00000000; // Not used
; v0 }) m! q4 G; X; k: b6 p. `    mcasp->regs->DLBCTL     = 0x00000000; // Not used2 c* `! D* X2 {% Q7 ^  f; W$ @
    mcasp->regs->AMUTE      = 0x00000000; // Not used6 ]# j$ I, r2 ^  j

$ s" x( F  s, A/ q% q/* Starting sections of the McASP*/
5 U1 z0 J8 f) ^9 g    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* @3 e' i2 u, H7 C  B2 c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
) f) a1 n3 O$ m4 @0 X$ w    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- c, z2 q8 T# Y1 G1 Y" T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: ]. k1 s$ y* h" w% ~
# {* C+ k. b: ~1 K) g
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( Z/ Q+ F+ `7 e3 p( q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& W+ ~6 e1 q0 T$ l0 J0 {4 n9 {    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ `$ j! o- ~- r: v) {9 r/ U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% o9 z, k# i2 h: v- B+ k6 E
8 z/ H, `8 q( H0 t9 }$ W3 h5 n* S
    mcasp->regs->XSTAT = 0x0000ffff; + Z  Q, V* k' i" v
    mcasp->regs->RSTAT = 0x0000ffff; $ V0 v, I* e1 e) s" t& G" A& h
2 Y! f& d9 q: E, m- f) Z9 E) h
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' n) m" O9 ^# B6 L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ w6 v! U2 o9 Z3 v( u# Q
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
0 z; d0 ^6 x7 F' d" @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. A$ _2 i; \1 o' N

/ L. h& Q  C3 |; ~2 D7 x    /* Write a 0, so that no underrun occurs after releasing the state machine */
5 Y  D0 [7 w9 X# Q# A( O7 y    mcasp->regs->XBUF5 = 0;9 Y. E8 j1 e5 j7 B) P
    mcasp->regs->RBUF0 = 0;6 S. c9 l( Z9 T% d* f1 n

% Z$ g; ~+ K/ `" e    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : e3 c; |) r9 l' i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% y: |, P1 ?) [7 d) L    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : G0 @- A1 J+ t+ l5 K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& J' M( E0 {& i) t$ V5 g4 J. n  g! |/ Z- T' {6 ^
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 Z6 S  M" ]+ v' i% u4 w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 Q$ d) m0 m% ?9 E& z( P6 w    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
2 |* O& D. d- I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 R8 z: R* W( {1 Q7 I
% [6 J5 h0 D# i- n; X    CSR = 0x0000;4 a( q2 Q( S+ m3 O# ?" V3 `" \
    INTC_INTMUX1 = 0x3d;
9 \3 b) _6 H6 N/ {" f    ISTP = (unsigned int)vectors;
' z# c6 J/ g5 X9 V7 A9 E8 I, H$ K    ICR = 0xFFF0;  4 m6 B" t, Y- W2 u7 ?
    IER |= 0x12;  6 {$ z6 Q* Z$ g0 f! E! B
    CSR |= 0x01;  " p& K" n% P- J6 q, I% ~2 T# ]- b
  w9 U6 r" e9 ^6 z% \# k' H9 F7 q7 m

6 F) Z: F  J  j4 c- r( d3 ~% l3 i, }
' _6 r/ @! @5 [# q, T  r4 B3 d还有就是两个输入输出函数:" e1 l7 k0 b/ Y% q+ \
void output_sample(Int32 out_data)
) ^1 b' @. i9 `& w! M+ s% X{0 H. h- B) B1 O: y0 Y2 g. A9 t
  AIC31_data.uint = out_data;  
: T: @. x  N1 n* ^1 h  MCASP1_XBUF5_32BIT = AIC31_data.uint;# D% \/ `; R% Q* V
}
; W# R  Y5 t, t
  l- ]3 E4 Y# d% b2 \1 g  d& gInt32 input_sample(void)2 B$ u0 Y, a/ j$ H- L0 `8 ?
{  : ^1 q: E% c, \* |$ X% u
  AIC31_data.uint = MCASP1_RBUF0_32BIT;- n7 m! R; V1 [1 m7 ^3 P
  return (AIC31_data.uint);
+ d- q3 V, _$ ~7 g}' c  q' s7 S  S4 E+ N
8 a# p+ K% S" J0 ?8 q4 U! R8 @
分享到:  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-2-20 22:12 , Processed in 0.042080 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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