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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 r! B/ k, |2 v3 p2 d( C
main文件:
. Q! K) _" n; y7 g' w' o3 Ointerrupt void interrupt4(void)  * O6 Y6 d+ u( m  K$ d# N
{
  x8 w" l; K+ ^7 Y( {4 j2 W  Uint32 sample;' M2 o, u; D* X, I
' T  T) @; {5 o  g$ e, K6 @. l5 b
  sample = input_sample(); // read L + R samples from ADC& ^* Y( A3 N3 v
  output_sample(sample);   // write L + R samples to DAC
5 ]0 P" d# f& n" o+ d  return;
2 I0 U! F5 N# k' {4 n4 M}& k4 j' {& D) n
( ]5 e' U9 o9 }  p2 Z* r
int main( void )
1 l1 f1 P/ ~% l{
; S: j, H6 g; F- k) [% w1 Q6 L
0 G0 r" Q& _, e+ Z9 \! H* ?    /* Initialize BSL */; {. Z- C! }$ P8 b0 P3 _
    EVMC6747_init( );0 S: O3 s- W5 D3 {- L  t2 a  ?, z
        /* Call evmc6747_intr function */
8 Z" s4 m9 D8 F- u) c# M    aic3106_init( );6 S$ |2 u4 F6 X; O) C
        while(1);
  i1 j3 b2 x/ N, r: J# K$ V* Z! s}9 J) I; `, N8 q" f+ Q: k

$ ^7 n+ V: z8 Q1 ?
; e0 T" o0 o6 n( U' ]" Zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% c& J6 r9 l  K* j/* Initialize MCASP1 */! Q7 E( |# i$ |$ w! V. b/ w
    mcasp = &MCASP_MODULE_1;
5 p6 G( }* B2 z* a" l4 e# o    mcasp->regs->GBLCTL  = 0;       // Reset
' t0 I$ h% |; d* _    mcasp->regs->RGBLCTL = 0;       // Reset RX3 ?" J( [6 c/ L3 Y' G7 R
    mcasp->regs->XGBLCTL = 0;       // Reset TX& }7 S3 f9 s/ y' ^, P' w2 h9 O
    mcasp->regs->PWRDEMU = 1;       // Free-running
; b9 j, ]% O; L7 v0 [" i' d   // configure McASP0 receive registers4 _9 `) P5 W1 i4 P* y5 [
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
0 J+ e. B) h+ j3 Q: O7 l6 B    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% I# o7 k. I' i: G+ ?+ {
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( B/ a; w7 U% u' j    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
# D) h- E: D# Y; V    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" G0 ~/ Q$ V+ Z  k    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
/ v/ n: M* y5 f7 t+ e    mcasp->regs->RINTCTL    = 0x00000000; // Not used) s2 d, C7 G- a- e0 G
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 r9 J( ^6 ^6 i4 S9 f) u' `+ X1 a! R" K  t
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, a& f* e& f; O: L5 |3 ]
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 U! \# L0 W5 O; Z6 o    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) Z/ Z! v2 ^3 _: v9 ]  \  }
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
/ z* L; e6 _& g1 P. ~' c) ]    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) F) A% I% e! ^9 b# E' X    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  L3 A* I4 q& R$ Q
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
$ y0 o* \+ s" T/ y    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 M' u2 f/ ~. l9 b" H

; e: l% w1 J( g6 [6 w    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
. W' C0 d/ _  r; Q/ H8 r" M    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
) y5 {- }% r: ^7 q# W) s% }+ ~    mcasp->regs->PFUNC      = 0;          // All MCASPs  Y1 Y8 p( v7 n+ i' x5 x
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ n! x% l, C5 v1 b- C# ~
' J/ J* s3 P- o* r6 y0 [; Q6 E    mcasp->regs->DITCTL     = 0x00000000; // Not used! R  M* y% O/ I* Y4 M
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# Y. R6 R7 U( m( T( W+ }8 b    mcasp->regs->AMUTE      = 0x00000000; // Not used
' a$ w% A! B' |# _; ~: _
+ \% |; B7 k5 g' A/ w/* Starting sections of the McASP*/
2 ]& s6 t9 M: k4 M    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
8 o( z  T0 O) }5 H1 W& ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  3 F! {5 U" d! u* [
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. ^5 h  M4 f8 g* F+ N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ E/ j# T$ u9 B# X8 b9 |4 _
' c/ y% `5 Y% k# [    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
9 H8 T. ]4 ?7 ?3 Z! \$ p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
- P6 p4 d9 C- |4 `; \    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - m9 ]6 J! o0 [' l% G1 |8 \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 }% f1 }; e  w$ K, G% P& H6 R. h7 @( Q$ z" o
    mcasp->regs->XSTAT = 0x0000ffff;
% k3 d, p" X: g" K3 i0 O* p    mcasp->regs->RSTAT = 0x0000ffff; / M# z' K% G+ t. @9 O& `3 B, V
) m5 J/ \9 V/ }4 r4 j. p/ d
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
  y3 S" w* a! }! k! B( T* Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 K1 u/ j) G. m1 |, n' ?2 {1 b0 Z
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 u, y7 O  |  D  e- K  F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" H9 E7 c8 n3 S# @0 D. V9 }. r, X! G
    /* Write a 0, so that no underrun occurs after releasing the state machine */
1 d4 W1 C, [" A% \, o' Y    mcasp->regs->XBUF5 = 0;2 ]9 f$ c/ Z5 d0 k$ |: D
    mcasp->regs->RBUF0 = 0;
6 A* O; T% Y0 ?- t4 t
$ T7 V" Z$ h: ^2 r* F1 K/ r2 ^  _    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 m0 b/ s4 I& v% F+ l2 @0 V7 e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- y8 x% Z; U, [3 X7 [    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . ?: i$ V# Q. n  C9 t3 s& S1 l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 e; [- g: Y+ j0 g

0 r8 \+ [7 b9 L) T4 L! j% n    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " a( V# K& N- ?4 }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ Y3 P" j# W% z, j% c8 w    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 e9 [# M( p6 Q# z! ]6 P. d  m, W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! `9 g* W" C+ Z1 @3 \
+ Y! ^8 z- S% a
    CSR = 0x0000;/ l* L: z* ^8 _) x
    INTC_INTMUX1 = 0x3d;
, z  c  ]& e$ i& h6 \& f: P8 u2 \    ISTP = (unsigned int)vectors;
' @" D: P+ p( v    ICR = 0xFFF0;  
" W  U: j3 V) ^% x    IER |= 0x12;  ! k' d2 Z2 O( q  c: j
    CSR |= 0x01;  5 v! Y) V: m* G+ d

1 D. Y1 e" F# [" k) a
9 [, ~" k! d8 o4 g6 P" L; ^4 |9 B. e
还有就是两个输入输出函数:
/ A: C, ~3 \7 `+ Mvoid output_sample(Int32 out_data)+ Z( [9 y# O7 {7 D+ L& {" v- Y
{
: P8 O1 S) {, H, o  AIC31_data.uint = out_data;  
6 B1 o* k6 R% T( l  MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 v# q- N. [( h+ N4 ^}
; U$ ~: u) j9 j4 U% e) C
7 H) g! Q- F2 f! N4 G! rInt32 input_sample(void)
# {) A" k3 B3 x" t& N& t{  1 c' W1 h+ Z, p3 A0 S$ F' ^5 T
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
' i/ Y) K3 ?- K- ~( e  return (AIC31_data.uint);
3 R: n2 ?3 d4 x6 y- k}
# Z" r+ T/ H( W6 n; r& S- K8 o6 S5 V" I2 n; ?7 b7 L
分享到:  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-7-19 07:07 , Processed in 0.046491 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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